void kernel_ssyrk_nt_l_4x4_vs_lib4(int kmax, float *alpha, float *A, float *B,
                                   float *beta, float *C, float *D, int km,
                                   int kn) {
  const int bs = 4;
  float a_0, a_1, a_2, a_3, b_0, b_1, b_2, b_3,
      c_00 = 0, c_10 = 0, c_11 = 0, c_20 = 0, c_21 = 0, c_22 = 0, c_30 = 0,
      c_31 = 0, c_32 = 0, c_33 = 0;
  int k;
  for (k = 0; k < kmax - 3; k += 4) {
    a_0 = A[0];
    a_1 = A[1];
    a_2 = A[2];
    a_3 = A[3];
    b_0 = B[0];
    b_1 = B[1];
    b_2 = B[2];
    b_3 = B[3];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    a_0 = A[4];
    a_1 = A[5];
    a_2 = A[6];
    a_3 = A[7];
    b_0 = B[4];
    b_1 = B[5];
    b_2 = B[6];
    b_3 = B[7];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    a_0 = A[8];
    a_1 = A[9];
    a_2 = A[10];
    a_3 = A[11];
    b_0 = B[8];
    b_1 = B[9];
    b_2 = B[10];
    b_3 = B[11];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    a_0 = A[12];
    a_1 = A[13];
    a_2 = A[14];
    a_3 = A[15];
    b_0 = B[12];
    b_1 = B[13];
    b_2 = B[14];
    b_3 = B[15];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    A += 16;
    B += 16;
  }
  for (; k < kmax; k++) {
    a_0 = A[0];
    a_1 = A[1];
    a_2 = A[2];
    a_3 = A[3];
    b_0 = B[0];
    b_1 = B[1];
    b_2 = B[2];
    b_3 = B[3];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    A += 4;
    B += 4;
  }
  c_00 = beta[0] * C[0 + bs * 0] + alpha[0] * c_00;
  c_10 = beta[0] * C[1 + bs * 0] + alpha[0] * c_10;
  c_20 = beta[0] * C[2 + bs * 0] + alpha[0] * c_20;
  c_30 = beta[0] * C[3 + bs * 0] + alpha[0] * c_30;
  c_11 = beta[0] * C[1 + bs * 1] + alpha[0] * c_11;
  c_21 = beta[0] * C[2 + bs * 1] + alpha[0] * c_21;
  c_31 = beta[0] * C[3 + bs * 1] + alpha[0] * c_31;
  c_22 = beta[0] * C[2 + bs * 2] + alpha[0] * c_22;
  c_32 = beta[0] * C[3 + bs * 2] + alpha[0] * c_32;
  c_33 = beta[0] * C[3 + bs * 3] + alpha[0] * c_33;
store:
  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;
    if (kn == 1)
      return;
    D[1 + bs * 1] = c_11;
    D[2 + bs * 1] = c_21;
    D[3 + bs * 1] = c_31;
    if (kn == 2)
      return;
    D[2 + bs * 2] = c_22;
    D[3 + bs * 2] = c_32;
    if (kn == 3)
      return;
    D[3 + bs * 3] = c_33;
  } else if (km >= 3) {
    D[0 + bs * 0] = c_00;
    D[1 + bs * 0] = c_10;
    D[2 + bs * 0] = c_20;
    if (kn == 1)
      return;
    D[1 + bs * 1] = c_11;
    D[2 + bs * 1] = c_21;
    if (kn == 2)
      return;
    D[2 + bs * 2] = c_22;
  } else if (km >= 2) {
    D[0 + bs * 0] = c_00;
    D[1 + bs * 0] = c_10;
    if (kn == 1)
      return;
    D[1 + bs * 1] = c_11;
  } else {
    D[0 + bs * 0] = c_00;
  }
}


x86 assembly (clang, -O0):
<kernel_ssyrk_nt_l_4x4_vs_lib4>:
push   %rbp
mov    %rsp,%rbp
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x4,-0x34(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x6c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x74(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x7c(%rbp)
movl   $0x0,-0x80(%rbp)
mov    -0x80(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    17d8 <kernel_ssyrk_nt_l_4x4_vs_lib4+0x6d8>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x38(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x5c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x64(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x70(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x60(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x68(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x74(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x50(%rbp),%xmm2
movss  -0x6c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x50(%rbp),%xmm2
movss  -0x78(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x54(%rbp),%xmm2
movss  -0x7c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x18(%rbp),%rax
movss  0x10(%rax),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movss  0x14(%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movss  0x18(%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movss  0x1c(%rax),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%rax
movss  0x10(%rax),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movss  0x14(%rax),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x18(%rax),%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movss  0x1c(%rax),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x38(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x5c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x64(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x70(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x60(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x68(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x74(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x50(%rbp),%xmm2
movss  -0x6c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x50(%rbp),%xmm2
movss  -0x78(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x54(%rbp),%xmm2
movss  -0x7c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x18(%rbp),%rax
movss  0x20(%rax),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movss  0x24(%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movss  0x28(%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movss  0x2c(%rax),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%rax
movss  0x20(%rax),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movss  0x24(%rax),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x28(%rax),%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movss  0x2c(%rax),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x38(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x5c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x64(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x70(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x60(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x68(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x74(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x50(%rbp),%xmm2
movss  -0x6c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x50(%rbp),%xmm2
movss  -0x78(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x54(%rbp),%xmm2
movss  -0x7c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x18(%rbp),%rax
movss  0x30(%rax),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movss  0x34(%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movss  0x38(%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movss  0x3c(%rax),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%rax
movss  0x30(%rax),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movss  0x34(%rax),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x38(%rax),%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movss  0x3c(%rax),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x38(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x5c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x64(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x70(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x60(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x68(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x74(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x50(%rbp),%xmm2
movss  -0x6c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x50(%rbp),%xmm2
movss  -0x78(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x54(%rbp),%xmm2
movss  -0x7c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x40,%rax
mov    %rax,-0x20(%rbp)
mov    -0x80(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x80(%rbp)
jmp    1183 <kernel_ssyrk_nt_l_4x4_vs_lib4+0x83>
jmp    17dd <kernel_ssyrk_nt_l_4x4_vs_lib4+0x6dd>
mov    -0x80(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1995 <kernel_ssyrk_nt_l_4x4_vs_lib4+0x895>
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x38(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x5c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x64(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x70(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x60(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x68(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
movss  -0x74(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x40(%rbp),%xmm0
movss  -0x50(%rbp),%xmm2
movss  -0x6c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x50(%rbp),%xmm2
movss  -0x78(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x44(%rbp),%xmm0
movss  -0x54(%rbp),%xmm2
movss  -0x7c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x20(%rbp)
mov    -0x80(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x80(%rbp)
jmp    17dd <kernel_ssyrk_nt_l_4x4_vs_lib4+0x6dd>
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  (%rax),%xmm2
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mulss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  0x4(%rax),%xmm2
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mulss  -0x5c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  0x8(%rax),%xmm2
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mulss  -0x64(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  0xc(%rax),%xmm2
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mulss  -0x70(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  0x14(%rax),%xmm2
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mulss  -0x60(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  0x18(%rax),%xmm2
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mulss  -0x68(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  0x1c(%rax),%xmm2
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mulss  -0x74(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x74(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  0x28(%rax),%xmm2
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mulss  -0x6c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  0x2c(%rax),%xmm2
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mulss  -0x78(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movss  0x3c(%rax),%xmm2
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm1
mulss  -0x7c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x7c(%rbp)
cmpl   $0x4,0x18(%rbp)
jl     1c09 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xb09>
movss  -0x58(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x5c(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x64(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x70(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0xc(%rax)
cmpl   $0x1,0x20(%rbp)
jne    1b92 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xa92>
jmp    1ce7 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbe7>
movss  -0x60(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x14(%rax)
movss  -0x68(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x18(%rax)
movss  -0x74(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x1c(%rax)
cmpl   $0x2,0x20(%rbp)
jne    1bcb <kernel_ssyrk_nt_l_4x4_vs_lib4+0xacb>
jmp    1ce7 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbe7>
movss  -0x6c(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x28(%rax)
movss  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x2c(%rax)
cmpl   $0x3,0x20(%rbp)
jne    1bf6 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xaf6>
jmp    1ce7 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbe7>
movss  -0x7c(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x3c(%rax)
jmp    1ce7 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbe7>
cmpl   $0x3,0x18(%rbp)
jl     1c89 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xb89>
movss  -0x58(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x5c(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x64(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x8(%rax)
cmpl   $0x1,0x20(%rbp)
jne    1c4b <kernel_ssyrk_nt_l_4x4_vs_lib4+0xb4b>
jmp    1ce7 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbe7>
movss  -0x60(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x14(%rax)
movss  -0x68(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x18(%rax)
cmpl   $0x2,0x20(%rbp)
jne    1c76 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xb76>
jmp    1ce7 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbe7>
movss  -0x6c(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x28(%rax)
jmp    1ce2 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbe2>
cmpl   $0x2,0x18(%rbp)
jl     1cd0 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbd0>
movss  -0x58(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x5c(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x4(%rax)
cmpl   $0x1,0x20(%rbp)
jne    1cbd <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbbd>
jmp    1ce7 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbe7>
movss  -0x60(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,0x14(%rax)
jmp    1cdd <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbdd>
movss  -0x58(%rbp),%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,(%rax)
jmp    1ce2 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbe2>
jmp    1ce7 <kernel_ssyrk_nt_l_4x4_vs_lib4+0xbe7>
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_ssyrk_nt_l_4x4_vs_lib4>:
cmp    $0x4,%edi
jl     12c3 <kernel_ssyrk_nt_l_4x4_vs_lib4+0x1c3>
lea    -0x3(%rdi),%r10d
xorps  %xmm7,%xmm7
xorps  %xmm13,%xmm13
xor    %eax,%eax
xorps  %xmm14,%xmm14
xorps  %xmm4,%xmm4
nopl   (%rax)
movups (%rdx),%xmm0
movups 0x10(%rdx),%xmm10
movups 0x20(%rdx),%xmm9
movups 0x30(%rdx),%xmm8
movaps %xmm0,%xmm1
shufps $0x94,%xmm0,%xmm1
movaps %xmm0,%xmm3
unpckhps %xmm0,%xmm3
movsd  0x4(%rcx),%xmm5
movss  (%rcx),%xmm2
movlhps %xmm5,%xmm2
movaps %xmm2,%xmm6
shufps $0xd8,%xmm5,%xmm6
shufps $0x20,%xmm2,%xmm2
mulps  %xmm1,%xmm2
addps  %xmm7,%xmm2
shufps $0x49,%xmm6,%xmm6
mulps  %xmm3,%xmm6
addps  %xmm4,%xmm6
shufps $0xff,%xmm0,%xmm0
shufps $0x55,%xmm5,%xmm5
mulss  %xmm0,%xmm5
addss  %xmm14,%xmm5
movss  0xc(%rcx),%xmm11
mulss  %xmm0,%xmm11
addss  %xmm13,%xmm11
movaps %xmm10,%xmm3
unpckhps %xmm10,%xmm3
movaps %xmm10,%xmm1
shufps $0x94,%xmm10,%xmm1
movsd  0x14(%rcx),%xmm0
movss  0x10(%rcx),%xmm7
movlhps %xmm0,%xmm7
movaps %xmm7,%xmm4
shufps $0xd8,%xmm0,%xmm4
shufps $0x49,%xmm4,%xmm4
mulps  %xmm3,%xmm4
addps  %xmm6,%xmm4
shufps $0x20,%xmm7,%xmm7
mulps  %xmm1,%xmm7
addps  %xmm2,%xmm7
shufps $0xff,%xmm10,%xmm10
shufps $0x55,%xmm0,%xmm0
mulss  %xmm10,%xmm0
addss  %xmm5,%xmm0
movss  0x1c(%rcx),%xmm12
mulss  %xmm10,%xmm12
addss  %xmm11,%xmm12
movaps %xmm9,%xmm3
shufps $0x94,%xmm9,%xmm3
movaps %xmm9,%xmm2
unpckhps %xmm9,%xmm2
movsd  0x24(%rcx),%xmm1
movss  0x20(%rcx),%xmm5
movlhps %xmm1,%xmm5
movaps %xmm5,%xmm6
shufps $0xd8,%xmm1,%xmm6
shufps $0x20,%xmm5,%xmm5
mulps  %xmm3,%xmm5
addps  %xmm7,%xmm5
shufps $0x49,%xmm6,%xmm6
mulps  %xmm2,%xmm6
addps  %xmm4,%xmm6
shufps $0xff,%xmm9,%xmm9
shufps $0x55,%xmm1,%xmm1
mulss  %xmm9,%xmm1
addss  %xmm0,%xmm1
movss  0x2c(%rcx),%xmm0
mulss  %xmm9,%xmm0
addss  %xmm12,%xmm0
movaps %xmm8,%xmm4
unpckhps %xmm8,%xmm4
movaps %xmm8,%xmm7
shufps $0x94,%xmm8,%xmm7
movsd  0x34(%rcx),%xmm14
movss  0x30(%rcx),%xmm3
movlhps %xmm14,%xmm3
movaps %xmm3,%xmm2
shufps $0xd8,%xmm14,%xmm2
shufps $0x49,%xmm2,%xmm2
mulps  %xmm4,%xmm2
shufps $0x20,%xmm3,%xmm3
mulps  %xmm7,%xmm3
movaps %xmm3,%xmm7
addps  %xmm5,%xmm7
movaps %xmm2,%xmm4
addps  %xmm6,%xmm4
shufps $0xff,%xmm8,%xmm8
shufps $0x55,%xmm14,%xmm14
mulss  %xmm8,%xmm14
addss  %xmm1,%xmm14
movss  0x3c(%rcx),%xmm13
mulss  %xmm8,%xmm13
addss  %xmm0,%xmm13
add    $0x40,%rdx
add    $0x40,%rcx
add    $0x4,%eax
cmp    %r10d,%eax
jl     1120 <kernel_ssyrk_nt_l_4x4_vs_lib4+0x20>
addps  %xmm5,%xmm3
addps  %xmm6,%xmm2
mov    %edi,%eax
and    $0xfffffffc,%eax
jmp    12d3 <kernel_ssyrk_nt_l_4x4_vs_lib4+0x1d3>
xorps  %xmm3,%xmm3
xor    %eax,%eax
xorps  %xmm14,%xmm14
xorps  %xmm13,%xmm13
xorps  %xmm2,%xmm2
mov    0x10(%rsp),%r10d
cmp    %edi,%eax
jge    136e <kernel_ssyrk_nt_l_4x4_vs_lib4+0x26e>
sub    %eax,%edi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movaps %xmm2,%xmm8
movaps %xmm3,%xmm5
movups (%rdx,%rax,1),%xmm0
movaps %xmm0,%xmm1
unpckhps %xmm0,%xmm1
movaps %xmm0,%xmm2
shufps $0x94,%xmm0,%xmm2
movsd  0x4(%rcx,%rax,1),%xmm4
movss  (%rcx,%rax,1),%xmm6
movlhps %xmm4,%xmm6
movaps %xmm6,%xmm7
shufps $0xd8,%xmm4,%xmm7
shufps $0x49,%xmm7,%xmm7
mulps  %xmm1,%xmm7
shufps $0x20,%xmm6,%xmm6
mulps  %xmm2,%xmm6
movaps %xmm6,%xmm3
addps  %xmm5,%xmm3
movaps %xmm7,%xmm2
addps  %xmm8,%xmm2
shufps $0xff,%xmm0,%xmm0
shufps $0x55,%xmm4,%xmm4
mulss  %xmm0,%xmm4
addss  %xmm4,%xmm14
movss  0xc(%rcx,%rax,1),%xmm1
mulss  %xmm0,%xmm1
addss  %xmm1,%xmm13
add    $0x10,%rax
add    $0xffffffff,%edi
jne    12f0 <kernel_ssyrk_nt_l_4x4_vs_lib4+0x1f0>
addps  %xmm5,%xmm6
addps  %xmm8,%xmm7
movaps %xmm6,%xmm3
movaps %xmm7,%xmm2
mov    0x18(%rsp),%edx
mov    0x8(%rsp),%rcx
movss  (%r8),%xmm7
movss  (%rsi),%xmm4
movaps %xmm3,%xmm0
mulss  %xmm4,%xmm0
movss  (%r9),%xmm10
mulss  %xmm7,%xmm10
addss  %xmm0,%xmm10
movaps %xmm3,%xmm0
shufps $0x55,%xmm3,%xmm0
mulss  %xmm4,%xmm0
movss  0x4(%r9),%xmm5
mulss  %xmm7,%xmm5
addss  %xmm0,%xmm5
movaps %xmm3,%xmm0
shufps $0xff,%xmm3,%xmm0
mulss  %xmm4,%xmm0
movss  0x8(%r9),%xmm6
mulss  %xmm7,%xmm6
addss  %xmm0,%xmm6
movhlps %xmm3,%xmm3
mulss  %xmm4,%xmm3
movss  0x14(%r9),%xmm8
mulss  %xmm7,%xmm8
addss  %xmm3,%xmm8
movaps %xmm2,%xmm0
mulss  %xmm4,%xmm0
movss  0x18(%r9),%xmm3
mulss  %xmm7,%xmm3
addss  %xmm0,%xmm3
movaps %xmm2,%xmm0
shufps $0x55,%xmm2,%xmm0
mulss  %xmm4,%xmm0
movss  0x28(%r9),%xmm9
mulss  %xmm7,%xmm9
addss  %xmm0,%xmm9
cmp    $0x4,%r10d
jl     14bc <kernel_ssyrk_nt_l_4x4_vs_lib4+0x3bc>
movss  0x1c(%r9),%xmm0
mulss  %xmm7,%xmm0
movss  0x2c(%r9),%xmm12
mulss  %xmm7,%xmm12
movss  0x3c(%r9),%xmm11
mulss  %xmm7,%xmm11
movaps %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
mulss  %xmm4,%xmm1
mulss  0xc(%r9),%xmm7
addss  %xmm1,%xmm7
movss  %xmm10,(%rcx)
movss  %xmm5,0x4(%rcx)
movss  %xmm6,0x8(%rcx)
movss  %xmm7,0xc(%rcx)
cmp    $0x1,%edx
je     14eb <kernel_ssyrk_nt_l_4x4_vs_lib4+0x3eb>
shufps $0xff,%xmm2,%xmm2
mulss  %xmm4,%xmm2
addss  %xmm2,%xmm0
movss  %xmm8,0x14(%rcx)
movss  %xmm3,0x18(%rcx)
movss  %xmm0,0x1c(%rcx)
cmp    $0x2,%edx
je     14eb <kernel_ssyrk_nt_l_4x4_vs_lib4+0x3eb>
mulss  %xmm4,%xmm14
addss  %xmm14,%xmm12
movss  %xmm9,0x28(%rcx)
movss  %xmm12,0x2c(%rcx)
cmp    $0x3,%edx
je     14eb <kernel_ssyrk_nt_l_4x4_vs_lib4+0x3eb>
mulss  %xmm4,%xmm13
addss  %xmm13,%xmm11
mov    $0xf,%eax
movaps %xmm11,%xmm9
jmp    150a <kernel_ssyrk_nt_l_4x4_vs_lib4+0x40a>
cmp    $0x3,%r10d
jne    14ec <kernel_ssyrk_nt_l_4x4_vs_lib4+0x3ec>
movss  %xmm10,(%rcx)
movss  %xmm5,0x4(%rcx)
movss  %xmm6,0x8(%rcx)
cmp    $0x1,%edx
je     14eb <kernel_ssyrk_nt_l_4x4_vs_lib4+0x3eb>
movss  %xmm8,0x14(%rcx)
movss  %xmm3,0x18(%rcx)
mov    $0xa,%eax
cmp    $0x2,%edx
jne    150a <kernel_ssyrk_nt_l_4x4_vs_lib4+0x40a>
ret
movss  %xmm10,(%rcx)
cmp    $0x2,%r10d
jl     14eb <kernel_ssyrk_nt_l_4x4_vs_lib4+0x3eb>
movss  %xmm5,0x4(%rcx)
mov    $0x5,%eax
movaps %xmm8,%xmm9
cmp    $0x1,%edx
je     14eb <kernel_ssyrk_nt_l_4x4_vs_lib4+0x3eb>
movss  %xmm9,(%rcx,%rax,4)
ret

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

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