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


x86 assembly (clang, -O0):
<kernel_dgemm_nn_4x4_vs_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
cmpl   $0x0,-0xc(%rbp)
jg     1140 <kernel_dgemm_nn_4x4_vs_lib4+0x40>
jmp    2850 <kernel_dgemm_nn_4x4_vs_lib4+0x1750>
movl   $0x4,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1c4b <kernel_dgemm_nn_4x4_vs_lib4+0xb4b>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    11f8 <kernel_dgemm_nn_4x4_vs_lib4+0xf8>
jmp    1c50 <kernel_dgemm_nn_4x4_vs_lib4+0xb50>
mov    -0x2c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1f04 <kernel_dgemm_nn_4x4_vs_lib4+0xe04>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1c50 <kernel_dgemm_nn_4x4_vs_lib4+0xb50>
cmpl   $0x0,0x20(%rbp)
jne    1f22 <kernel_dgemm_nn_4x4_vs_lib4+0xe22>
cmpl   $0x0,0x30(%rbp)
jne    1f1d <kernel_dgemm_nn_4x4_vs_lib4+0xe1d>
jmp    245a <kernel_dgemm_nn_4x4_vs_lib4+0x135a>
jmp    2655 <kernel_dgemm_nn_4x4_vs_lib4+0x1555>
cmpl   $0x0,0x28(%rbp)
jne    2040 <kernel_dgemm_nn_4x4_vs_lib4+0xf40>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
mov    0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
jmp    214f <kernel_dgemm_nn_4x4_vs_lib4+0x104f>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
cmpl   $0x1,0x20(%rbp)
jne    22d2 <kernel_dgemm_nn_4x4_vs_lib4+0x11d2>
movsd  -0xf8(%rbp),%xmm0
ff
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x118(%rbp),%xmm0
ff
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
addsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
addsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x120(%rbp),%xmm0
ff
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
addsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
addsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
addsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
jmp    2446 <kernel_dgemm_nn_4x4_vs_lib4+0x1346>
movsd  -0xf8(%rbp),%xmm0
ff
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x118(%rbp),%xmm0
ff
subsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
subsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
subsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x120(%rbp),%xmm0
ff
subsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
subsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
subsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
subsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
subsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
subsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
subsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
subsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
subsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
cmpl   $0x0,0x30(%rbp)
jne    2455 <kernel_dgemm_nn_4x4_vs_lib4+0x1355>
jmp    245a <kernel_dgemm_nn_4x4_vs_lib4+0x135a>
jmp    2655 <kernel_dgemm_nn_4x4_vs_lib4+0x1555>
cmpl   $0x4,-0x4(%rbp)
jl     257c <kernel_dgemm_nn_4x4_vs_lib4+0x147c>
movsd  -0x78(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x58(%rax)
cmpl   $0x4,-0x8(%rbp)
jl     2577 <kernel_dgemm_nn_4x4_vs_lib4+0x1477>
movsd  -0x90(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    2650 <kernel_dgemm_nn_4x4_vs_lib4+0x1550>
movsd  -0x78(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
cmpl   $0x4,-0x8(%rbp)
jl     264b <kernel_dgemm_nn_4x4_vs_lib4+0x154b>
movsd  -0x90(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    2650 <kernel_dgemm_nn_4x4_vs_lib4+0x1550>
jmp    2850 <kernel_dgemm_nn_4x4_vs_lib4+0x1750>
cmpl   $0x4,-0x8(%rbp)
jl     2777 <kernel_dgemm_nn_4x4_vs_lib4+0x1677>
movsd  -0x78(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x58(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     2772 <kernel_dgemm_nn_4x4_vs_lib4+0x1672>
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    284b <kernel_dgemm_nn_4x4_vs_lib4+0x174b>
movsd  -0x78(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     2846 <kernel_dgemm_nn_4x4_vs_lib4+0x1746>
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    284b <kernel_dgemm_nn_4x4_vs_lib4+0x174b>
jmp    2850 <kernel_dgemm_nn_4x4_vs_lib4+0x1750>
add    $0xf0,%rsp
pop    %rbp
ret

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

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

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