void kernel_dgemm_dtrsm_nt_4x2_vs_lib4(int km, int kn, int tri, int kadd,
                                       int ksub, double *Ap, double *Bp,
                                       double *Am, double *Bm, double *C,
                                       double *D, double *fact, int alg) {
  const int bs = 4;
  int k;
  double a_0, a_1, a_2, a_3, b_0, b_1, c_00 = 0, c_01 = 0, c_10 = 0, c_11 = 0,
                                       c_20 = 0, c_21 = 0, c_30 = 0, c_31 = 0;
  k = 0;
  if (kadd > 0) {
    if (tri == 1) {
      if (kadd >= 4) {
        a_0 = Ap[0 + bs * 0];
        b_0 = Bp[0 + bs * 0];
        b_1 = Bp[1 + bs * 0];
        c_00 += a_0 * b_0;
        c_01 += a_0 * b_1;
        a_0 = Ap[0 + bs * 1];
        a_1 = Ap[1 + bs * 1];
        b_0 = Bp[0 + bs * 1];
        b_1 = Bp[1 + bs * 1];
        c_00 += a_0 * b_0;
        c_10 += a_1 * b_0;
        c_01 += a_0 * b_1;
        c_11 += a_1 * b_1;
        a_0 = Ap[0 + bs * 2];
        a_1 = Ap[1 + bs * 2];
        a_2 = Ap[2 + bs * 2];
        b_0 = Bp[0 + bs * 2];
        b_1 = Bp[1 + bs * 2];
        c_00 += a_0 * b_0;
        c_10 += a_1 * b_0;
        c_20 += a_2 * b_0;
        c_01 += a_0 * b_1;
        c_11 += a_1 * b_1;
        c_21 += a_2 * b_1;
        a_0 = Ap[0 + bs * 3];
        a_1 = Ap[1 + bs * 3];
        a_2 = Ap[2 + bs * 3];
        a_3 = Ap[3 + bs * 3];
        b_0 = Bp[0 + bs * 3];
        b_1 = Bp[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;
        Ap += 16;
        Bp += 16;
        k += 4;
      } else {
        a_0 = Ap[0 + bs * 0];
        b_0 = Bp[0 + bs * 0];
        b_1 = Bp[1 + bs * 0];
        c_00 += a_0 * b_0;
        c_01 += a_0 * b_1;
        k += 1;
        if (kadd > 1) {
          a_0 = Ap[0 + bs * 1];
          a_1 = Ap[1 + bs * 1];
          b_0 = Bp[0 + bs * 1];
          b_1 = Bp[1 + bs * 1];
          c_00 += a_0 * b_0;
          c_10 += a_1 * b_0;
          c_01 += a_0 * b_1;
          c_11 += a_1 * b_1;
          k += 1;
          if (kadd > 2) {
            a_0 = Ap[0 + bs * 2];
            a_1 = Ap[1 + bs * 2];
            a_2 = Ap[2 + bs * 2];
            b_0 = Bp[0 + bs * 2];
            b_1 = Bp[1 + bs * 2];
            c_00 += a_0 * b_0;
            c_10 += a_1 * b_0;
            c_20 += a_2 * b_0;
            c_01 += a_0 * b_1;
            c_11 += a_1 * b_1;
            c_21 += a_2 * b_1;
            k += 1;
          }
        }
      }
    }
    for (; k < kadd - 3; k += 4) {
      a_0 = Ap[0 + bs * 0];
      a_1 = Ap[1 + bs * 0];
      a_2 = Ap[2 + bs * 0];
      a_3 = Ap[3 + bs * 0];
      b_0 = Bp[0 + bs * 0];
      b_1 = Bp[1 + bs * 0];
      c_00 += a_0 * b_0;
      c_10 += a_1 * b_0;
      c_20 += a_2 * b_0;
      c_30 += a_3 * b_0;
      c_01 += a_0 * b_1;
      c_11 += a_1 * b_1;
      c_21 += a_2 * b_1;
      c_31 += a_3 * b_1;
      a_0 = Ap[0 + bs * 1];
      a_1 = Ap[1 + bs * 1];
      a_2 = Ap[2 + bs * 1];
      a_3 = Ap[3 + bs * 1];
      b_0 = Bp[0 + bs * 1];
      b_1 = Bp[1 + bs * 1];
      c_00 += a_0 * b_0;
      c_10 += a_1 * b_0;
      c_20 += a_2 * b_0;
      c_30 += a_3 * b_0;
      c_01 += a_0 * b_1;
      c_11 += a_1 * b_1;
      c_21 += a_2 * b_1;
      c_31 += a_3 * b_1;
      a_0 = Ap[0 + bs * 2];
      a_1 = Ap[1 + bs * 2];
      a_2 = Ap[2 + bs * 2];
      a_3 = Ap[3 + bs * 2];
      b_0 = Bp[0 + bs * 2];
      b_1 = Bp[1 + bs * 2];
      c_00 += a_0 * b_0;
      c_10 += a_1 * b_0;
      c_20 += a_2 * b_0;
      c_30 += a_3 * b_0;
      c_01 += a_0 * b_1;
      c_11 += a_1 * b_1;
      c_21 += a_2 * b_1;
      c_31 += a_3 * b_1;
      a_0 = Ap[0 + bs * 3];
      a_1 = Ap[1 + bs * 3];
      a_2 = Ap[2 + bs * 3];
      a_3 = Ap[3 + bs * 3];
      b_0 = Bp[0 + bs * 3];
      b_1 = Bp[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;
      Ap += 16;
      Bp += 16;
    }
    for (; k < kadd; k++) {
      a_0 = Ap[0 + bs * 0];
      a_1 = Ap[1 + bs * 0];
      a_2 = Ap[2 + bs * 0];
      a_3 = Ap[3 + bs * 0];
      b_0 = Bp[0 + bs * 0];
      b_1 = Bp[1 + bs * 0];
      c_00 += a_0 * b_0;
      c_10 += a_1 * b_0;
      c_20 += a_2 * b_0;
      c_30 += a_3 * b_0;
      c_01 += a_0 * b_1;
      c_11 += a_1 * b_1;
      c_21 += a_2 * b_1;
      c_31 += a_3 * b_1;
      Ap += 4;
      Bp += 4;
    }
  }
  for (k = 0; k < ksub - 3; k += 4) {
    a_0 = Am[0 + bs * 0];
    a_1 = Am[1 + bs * 0];
    a_2 = Am[2 + bs * 0];
    a_3 = Am[3 + bs * 0];
    b_0 = Bm[0 + bs * 0];
    b_1 = Bm[1 + bs * 0];
    c_00 -= a_0 * b_0;
    c_10 -= a_1 * b_0;
    c_20 -= a_2 * b_0;
    c_30 -= a_3 * b_0;
    c_01 -= a_0 * b_1;
    c_11 -= a_1 * b_1;
    c_21 -= a_2 * b_1;
    c_31 -= a_3 * b_1;
    a_0 = Am[0 + bs * 1];
    a_1 = Am[1 + bs * 1];
    a_2 = Am[2 + bs * 1];
    a_3 = Am[3 + bs * 1];
    b_0 = Bm[0 + bs * 1];
    b_1 = Bm[1 + bs * 1];
    c_00 -= a_0 * b_0;
    c_10 -= a_1 * b_0;
    c_20 -= a_2 * b_0;
    c_30 -= a_3 * b_0;
    c_01 -= a_0 * b_1;
    c_11 -= a_1 * b_1;
    c_21 -= a_2 * b_1;
    c_31 -= a_3 * b_1;
    a_0 = Am[0 + bs * 2];
    a_1 = Am[1 + bs * 2];
    a_2 = Am[2 + bs * 2];
    a_3 = Am[3 + bs * 2];
    b_0 = Bm[0 + bs * 2];
    b_1 = Bm[1 + bs * 2];
    c_00 -= a_0 * b_0;
    c_10 -= a_1 * b_0;
    c_20 -= a_2 * b_0;
    c_30 -= a_3 * b_0;
    c_01 -= a_0 * b_1;
    c_11 -= a_1 * b_1;
    c_21 -= a_2 * b_1;
    c_31 -= a_3 * b_1;
    a_0 = Am[0 + bs * 3];
    a_1 = Am[1 + bs * 3];
    a_2 = Am[2 + bs * 3];
    a_3 = Am[3 + bs * 3];
    b_0 = Bm[0 + bs * 3];
    b_1 = Bm[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;
    Am += 16;
    Bm += 16;
  }
  if (alg != 0) {
    c_00 += C[0 + bs * 0];
    c_10 += C[1 + bs * 0];
    c_20 += C[2 + bs * 0];
    c_30 += C[3 + bs * 0];
    c_01 += C[0 + bs * 1];
    c_11 += C[1 + bs * 1];
    c_21 += C[2 + bs * 1];
    c_31 += C[3 + bs * 1];
  }
  double a_00, a_10, a_11;
  a_00 = fact[0];
  c_00 *= a_00;
  c_10 *= a_00;
  c_20 *= a_00;
  c_30 *= a_00;
  D[0 + bs * 0] = c_00;
  D[1 + bs * 0] = c_10;
  D[2 + bs * 0] = c_20;
  if (km >= 4)
    D[3 + bs * 0] = c_30;
  if (kn == 1)
    return;
  a_10 = fact[1];
  a_11 = fact[2];
  c_01 -= c_00 * a_10;
  c_11 -= c_10 * a_10;
  c_21 -= c_20 * a_10;
  c_31 -= c_30 * a_10;
  c_01 *= a_11;
  c_11 *= a_11;
  c_21 *= a_11;
  c_31 *= a_11;
  D[0 + bs * 1] = c_01;
  D[1 + bs * 1] = c_11;
  D[2 + bs * 1] = c_21;
  if (km >= 4)
    D[3 + bs * 1] = c_31;
}


x86 assembly (clang, -O0):
<kernel_dgemm_dtrsm_nt_4x2_vs_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    0x40(%rbp),%eax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9,-0x20(%rbp)
movl   $0x4,-0x24(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%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
movl   $0x0,-0x28(%rbp)
cmpl   $0x0,-0x10(%rbp)
jle    1e28 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0xd28>
cmpl   $0x1,-0xc(%rbp)
jne    1752 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x652>
cmpl   $0x4,-0x10(%rbp)
jl     1518 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x418>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x20(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x20(%rbp)
mov    0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,0x10(%rbp)
mov    -0x28(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x28(%rbp)
jmp    174d <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x64d>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x1,-0x10(%rbp)
jle    1748 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x648>
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x2,-0x10(%rbp)
jle    1743 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x643>
mov    -0x20(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1748 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x648>
jmp    174d <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x64d>
jmp    1752 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x652>
jmp    1757 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x657>
mov    -0x28(%rbp),%eax
mov    -0x10(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1ca8 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0xba8>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x20(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x20(%rbp)
mov    0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,0x10(%rbp)
mov    -0x28(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x28(%rbp)
jmp    1757 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x657>
jmp    1cad <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0xbad>
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1e23 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0xd23>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,0x10(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1cad <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0xbad>
jmp    1e28 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0xd28>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    2660 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x1560>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x20(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x20(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x20(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x20(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,0x18(%rbp)
mov    0x20(%rbp),%rax
add    $0x80,%rax
mov    %rax,0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x28(%rbp)
jmp    1e2f <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0xd2f>
cmpl   $0x0,0x40(%rbp)
je     2713 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x1613>
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
mov    0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x70(%rbp),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     27b5 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x16b5>
movsd  -0x90(%rbp),%xmm0
ff
mov    0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
cmpl   $0x1,-0x8(%rbp)
jne    27c4 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x16c4>
jmp    2969 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x1869>
mov    0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x78(%rbp),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x30(%rbp),%rax
movsd  %xmm0,0x30(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     2969 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x1869>
movsd  -0x98(%rbp),%xmm0
ff
mov    0x30(%rbp),%rax
movsd  %xmm0,0x38(%rax)
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgemm_dtrsm_nt_4x2_vs_lib4>:
sub    $0x58,%rsp
test   %ecx,%ecx
jle    121f <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x11f>
mov    0x60(%rsp),%r10
xorpd  %xmm14,%xmm14
xor    %eax,%eax
cmp    $0x1,%edx
jne    1237 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x137>
movsd  (%r9),%xmm2
movsd  (%r10),%xmm3
mulsd  %xmm2,%xmm3
xorpd  %xmm0,%xmm0
addsd  %xmm0,%xmm3
mulsd  0x8(%r10),%xmm2
addsd  %xmm0,%xmm2
cmp    $0x4,%ecx
jb     18c8 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x7c8>
movsd  0x20(%r10),%xmm1
movsd  0x28(%r10),%xmm0
unpcklpd %xmm1,%xmm1
movq   %xmm3,%xmm3
movupd 0x20(%r9),%xmm4
movupd 0x40(%r9),%xmm5
mulpd  %xmm4,%xmm1
addpd  %xmm3,%xmm1
unpcklpd %xmm0,%xmm0
movq   %xmm2,%xmm2
mulpd  %xmm4,%xmm0
addpd  %xmm2,%xmm0
movupd 0x40(%r10),%xmm3
movapd %xmm3,%xmm4
movsd  0x50(%r9),%xmm2
unpcklpd %xmm2,%xmm2
mulpd  %xmm3,%xmm2
unpcklpd %xmm3,%xmm3
mulpd  %xmm5,%xmm3
addpd  %xmm1,%xmm3
unpckhpd %xmm4,%xmm4
mulpd  %xmm5,%xmm4
addpd  %xmm0,%xmm4
movupd 0x60(%r9),%xmm1
movupd 0x60(%r10),%xmm13
movapd %xmm13,%xmm0
movsd  0x70(%r9),%xmm10
unpcklpd %xmm10,%xmm10
mulpd  %xmm13,%xmm10
movsd  0x78(%r9),%xmm14
unpcklpd %xmm14,%xmm14
mulpd  %xmm13,%xmm14
unpcklpd %xmm13,%xmm13
mulpd  %xmm1,%xmm13
addpd  %xmm3,%xmm13
unpckhpd %xmm0,%xmm0
mulpd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
addpd  %xmm1,%xmm2
addpd  %xmm4,%xmm0
addpd  %xmm2,%xmm10
addpd  %xmm1,%xmm14
sub    $0xffffffffffffff80,%r9
sub    $0xffffffffffffff80,%r10
mov    $0x4,%eax
jmp    1245 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x145>
xorpd  %xmm13,%xmm13
xorpd  %xmm0,%xmm0
xorpd  %xmm14,%xmm14
xorpd  %xmm10,%xmm10
jmp    1484 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x384>
xorpd  %xmm13,%xmm13
xorpd  %xmm0,%xmm0
xorpd  %xmm10,%xmm10
lea    -0x3(%rcx),%edx
cmp    %edx,%eax
jge    13c8 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x2c8>
movupd (%r9),%xmm1
movupd (%r10),%xmm2
movupd 0x20(%r10),%xmm4
movapd %xmm2,%xmm5
movsd  0x10(%r9),%xmm7
unpcklpd %xmm7,%xmm7
mulpd  %xmm2,%xmm7
movsd  0x18(%r9),%xmm3
unpcklpd %xmm3,%xmm3
mulpd  %xmm2,%xmm3
unpcklpd %xmm2,%xmm2
mulpd  %xmm1,%xmm2
addpd  %xmm13,%xmm2
movupd 0x40(%r10),%xmm8
unpckhpd %xmm5,%xmm5
mulpd  %xmm1,%xmm5
addpd  %xmm0,%xmm5
addpd  %xmm10,%xmm7
addpd  %xmm14,%xmm3
movupd 0x20(%r9),%xmm9
movapd %xmm4,%xmm10
movsd  0x30(%r9),%xmm0
unpcklpd %xmm0,%xmm0
mulpd  %xmm4,%xmm0
movsd  0x38(%r9),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm4,%xmm6
movapd %xmm4,%xmm1
unpcklpd %xmm4,%xmm1
mulpd  %xmm9,%xmm1
addpd  %xmm2,%xmm1
movupd 0x60(%r10),%xmm13
unpckhpd %xmm4,%xmm10
mulpd  %xmm9,%xmm10
addpd  %xmm5,%xmm10
addpd  %xmm7,%xmm0
addpd  %xmm3,%xmm6
movupd 0x40(%r9),%xmm2
movapd %xmm8,%xmm3
movsd  0x50(%r9),%xmm4
unpcklpd %xmm4,%xmm4
mulpd  %xmm8,%xmm4
movsd  0x58(%r9),%xmm5
unpcklpd %xmm5,%xmm5
mulpd  %xmm8,%xmm5
unpcklpd %xmm8,%xmm8
mulpd  %xmm2,%xmm8
addpd  %xmm1,%xmm8
unpckhpd %xmm3,%xmm3
mulpd  %xmm2,%xmm3
addpd  %xmm10,%xmm3
addpd  %xmm0,%xmm4
addpd  %xmm6,%xmm5
movupd 0x60(%r9),%xmm1
movapd %xmm13,%xmm0
movsd  0x70(%r9),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm13,%xmm6
movsd  0x78(%r9),%xmm2
unpcklpd %xmm2,%xmm2
mulpd  %xmm13,%xmm2
unpcklpd %xmm13,%xmm13
mulpd  %xmm1,%xmm13
addpd  %xmm8,%xmm13
unpckhpd %xmm0,%xmm0
mulpd  %xmm1,%xmm0
addpd  %xmm3,%xmm0
movapd %xmm6,%xmm10
addpd  %xmm4,%xmm10
movapd %xmm2,%xmm14
addpd  %xmm5,%xmm14
sub    $0xffffffffffffff80,%r9
sub    $0xffffffffffffff80,%r10
add    $0x4,%eax
cmp    %edx,%eax
jl     1250 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x150>
addpd  %xmm5,%xmm2
addpd  %xmm4,%xmm6
movapd %xmm2,%xmm14
movapd %xmm6,%xmm10
cmp    %ecx,%eax
jge    1484 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x384>
sub    %eax,%ecx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movapd %xmm10,%xmm6
movapd %xmm14,%xmm7
movapd %xmm0,%xmm5
movapd %xmm13,%xmm8
movupd (%r9,%rax,1),%xmm0
movupd (%r10,%rax,1),%xmm4
movapd %xmm4,%xmm2
movsd  0x10(%r9,%rax,1),%xmm3
unpcklpd %xmm3,%xmm3
mulpd  %xmm4,%xmm3
movsd  0x18(%r9,%rax,1),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm4,%xmm1
unpcklpd %xmm4,%xmm4
mulpd  %xmm0,%xmm4
movapd %xmm4,%xmm13
addpd  %xmm8,%xmm13
unpckhpd %xmm2,%xmm2
mulpd  %xmm0,%xmm2
movapd %xmm2,%xmm0
addpd  %xmm5,%xmm0
movapd %xmm3,%xmm10
addpd  %xmm6,%xmm10
movapd %xmm1,%xmm14
addpd  %xmm7,%xmm14
add    $0x20,%rax
add    $0xffffffff,%ecx
jne    13e0 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x2e0>
addpd  %xmm7,%xmm1
addpd  %xmm6,%xmm3
addpd  %xmm5,%xmm2
addpd  %xmm8,%xmm4
movapd %xmm4,%xmm13
movapd %xmm2,%xmm0
movapd %xmm1,%xmm14
movapd %xmm3,%xmm10
mov    0x90(%rsp),%r9d
cmp    $0x4,%r8d
jl     17e0 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x6e0>
mov    0x70(%rsp),%r10
mov    0x68(%rsp),%rdx
add    $0xfffffffd,%r8d
xor    %eax,%eax
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movapd %xmm10,0x30(%rsp)
movapd %xmm14,0x10(%rsp)
movapd %xmm0,0x40(%rsp)
movupd (%rdx,%rax,1),%xmm2
movupd (%r10,%rax,1),%xmm5
movupd 0x20(%r10,%rax,1),%xmm3
movupd 0x40(%r10,%rax,1),%xmm7
movapd %xmm5,%xmm1
unpcklpd %xmm5,%xmm1
mulpd  %xmm2,%xmm1
subpd  %xmm1,%xmm13
movsd  0x10(%rdx,%rax,1),%xmm6
movsd  0x18(%rdx,%rax,1),%xmm4
movapd %xmm5,%xmm12
unpckhpd %xmm5,%xmm12
movapd %xmm2,-0x40(%rsp)
movapd %xmm2,%xmm1
mulpd  %xmm12,%xmm1
subpd  %xmm1,%xmm0
movapd %xmm6,-0x60(%rsp)
movapd %xmm6,%xmm1
unpcklpd %xmm6,%xmm1
mulpd  %xmm5,%xmm1
subpd  %xmm1,%xmm10
movapd %xmm4,(%rsp)
movapd %xmm4,%xmm1
unpcklpd %xmm4,%xmm1
movapd %xmm5,-0x10(%rsp)
mulpd  %xmm5,%xmm1
subpd  %xmm1,%xmm14
movupd 0x20(%rdx,%rax,1),%xmm2
movapd %xmm3,%xmm1
unpcklpd %xmm3,%xmm1
mulpd  %xmm2,%xmm1
subpd  %xmm1,%xmm13
movsd  0x30(%rdx,%rax,1),%xmm4
movsd  0x38(%rdx,%rax,1),%xmm5
movapd %xmm3,%xmm6
unpckhpd %xmm3,%xmm6
movapd %xmm2,-0x50(%rsp)
movapd %xmm2,%xmm1
mulpd  %xmm6,%xmm1
subpd  %xmm1,%xmm0
movapd %xmm4,-0x70(%rsp)
movapd %xmm4,%xmm1
unpcklpd %xmm4,%xmm1
mulpd  %xmm3,%xmm1
subpd  %xmm1,%xmm10
movapd %xmm5,-0x20(%rsp)
movapd %xmm5,%xmm1
unpcklpd %xmm5,%xmm1
movapd %xmm3,0x20(%rsp)
mulpd  %xmm3,%xmm1
subpd  %xmm1,%xmm14
movupd 0x40(%rdx,%rax,1),%xmm2
movapd %xmm7,%xmm1
unpcklpd %xmm7,%xmm1
mulpd  %xmm2,%xmm1
subpd  %xmm1,%xmm13
movapd %xmm7,%xmm15
unpckhpd %xmm7,%xmm15
movapd %xmm2,-0x80(%rsp)
movapd %xmm2,%xmm1
mulpd  %xmm15,%xmm1
subpd  %xmm1,%xmm0
movsd  0x50(%rdx,%rax,1),%xmm5
movapd %xmm5,%xmm1
unpcklpd %xmm5,%xmm1
mulpd  %xmm7,%xmm1
subpd  %xmm1,%xmm10
movsd  0x58(%rdx,%rax,1),%xmm1
movapd %xmm1,%xmm3
unpcklpd %xmm1,%xmm3
movapd %xmm7,-0x30(%rsp)
mulpd  %xmm7,%xmm3
subpd  %xmm3,%xmm14
movupd 0x60(%r10,%rax,1),%xmm11
movapd %xmm11,%xmm2
unpcklpd %xmm11,%xmm2
movupd 0x60(%rdx,%rax,1),%xmm3
mulpd  %xmm3,%xmm2
subpd  %xmm2,%xmm13
movapd %xmm11,%xmm8
unpckhpd %xmm11,%xmm8
movapd %xmm3,%xmm2
mulpd  %xmm8,%xmm2
subpd  %xmm2,%xmm0
movsd  0x70(%rdx,%rax,1),%xmm4
movapd %xmm4,%xmm2
unpcklpd %xmm4,%xmm2
mulpd  %xmm11,%xmm2
subpd  %xmm2,%xmm10
movsd  0x78(%rdx,%rax,1),%xmm9
movapd %xmm9,%xmm2
unpcklpd %xmm9,%xmm2
mulpd  %xmm11,%xmm2
subpd  %xmm2,%xmm14
add    $0x4,%ecx
sub    $0xffffffffffffff80,%rax
cmp    %r8d,%ecx
jl     14b0 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x3b0>
movapd 0x95b(%rip),%xmm0
movapd -0x40(%rsp),%xmm2
xorpd  %xmm0,%xmm2
movapd %xmm2,-0x40(%rsp)
movapd -0x60(%rsp),%xmm2
xorpd  %xmm0,%xmm2
movapd %xmm2,-0x60(%rsp)
movapd (%rsp),%xmm10
xorpd  %xmm0,%xmm10
movapd -0x50(%rsp),%xmm2
xorpd  %xmm0,%xmm2
movapd %xmm2,-0x50(%rsp)
movapd -0x70(%rsp),%xmm2
xorpd  %xmm0,%xmm2
movapd %xmm2,-0x70(%rsp)
movapd -0x20(%rsp),%xmm2
xorpd  %xmm0,%xmm2
movapd -0x80(%rsp),%xmm7
xorpd  %xmm0,%xmm7
xorpd  %xmm0,%xmm5
movapd %xmm5,-0x80(%rsp)
xorpd  %xmm0,%xmm1
xorpd  %xmm0,%xmm3
xorpd  %xmm0,%xmm4
xorpd  %xmm0,%xmm9
pshufd $0x44,%xmm10,%xmm0
movapd -0x10(%rsp),%xmm5
mulpd  %xmm5,%xmm0
addpd  0x10(%rsp),%xmm0
pshufd $0x44,%xmm2,%xmm2
movapd 0x20(%rsp),%xmm10
mulpd  %xmm10,%xmm2
addpd  %xmm0,%xmm2
pshufd $0x44,%xmm1,%xmm0
mulpd  -0x30(%rsp),%xmm0
addpd  %xmm2,%xmm0
pshufd $0x44,%xmm9,%xmm14
mulpd  %xmm11,%xmm14
addpd  %xmm0,%xmm14
pshufd $0x44,-0x60(%rsp),%xmm0
mulpd  %xmm5,%xmm0
addpd  0x30(%rsp),%xmm0
pshufd $0x44,-0x70(%rsp),%xmm1
mulpd  %xmm10,%xmm1
addpd  %xmm0,%xmm1
pshufd $0x44,-0x80(%rsp),%xmm0
mulpd  -0x30(%rsp),%xmm0
addpd  %xmm1,%xmm0
pshufd $0x44,%xmm4,%xmm10
mulpd  %xmm11,%xmm10
addpd  %xmm0,%xmm10
movapd -0x40(%rsp),%xmm0
mulpd  %xmm12,%xmm0
addpd  0x40(%rsp),%xmm0
movapd -0x50(%rsp),%xmm1
mulpd  %xmm6,%xmm1
addpd  %xmm0,%xmm1
mulpd  %xmm15,%xmm7
addpd  %xmm1,%xmm7
mulpd  %xmm8,%xmm3
addpd  %xmm7,%xmm3
movapd %xmm3,%xmm0
mov    0x88(%rsp),%rcx
mov    0x80(%rsp),%rax
test   %r9d,%r9d
je     182a <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x72a>
mov    0x78(%rsp),%rdx
movupd (%rdx),%xmm1
addpd  %xmm1,%xmm13
movupd 0x20(%rdx),%xmm1
addpd  %xmm1,%xmm0
movsd  0x10(%rdx),%xmm1
movhpd 0x30(%rdx),%xmm1
addpd  %xmm1,%xmm10
movsd  0x18(%rdx),%xmm1
movhpd 0x38(%rdx),%xmm1
addpd  %xmm1,%xmm14
movsd  (%rcx),%xmm4
movapd %xmm4,%xmm3
unpcklpd %xmm4,%xmm3
mulpd  %xmm13,%xmm3
movapd %xmm10,%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm14,%xmm4
movupd %xmm3,(%rax)
movsd  %xmm1,0x10(%rax)
cmp    $0x4,%edi
jl     185c <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x75c>
movsd  %xmm4,0x18(%rax)
cmp    $0x1,%esi
je     18c3 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x7c3>
movsd  0x8(%rcx),%xmm5
movsd  0x10(%rcx),%xmm2
movapd %xmm5,%xmm6
unpcklpd %xmm5,%xmm6
mulpd  %xmm6,%xmm3
subpd  %xmm3,%xmm0
unpckhpd %xmm10,%xmm10
mulsd  %xmm5,%xmm1
subsd  %xmm1,%xmm10
movapd %xmm2,%xmm1
unpcklpd %xmm2,%xmm1
mulpd  %xmm0,%xmm1
mulsd  %xmm2,%xmm10
movupd %xmm1,0x20(%rax)
movsd  %xmm10,0x30(%rax)
cmp    $0x4,%edi
jl     18c3 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x7c3>
unpckhpd %xmm14,%xmm14
mulsd  %xmm5,%xmm4
subsd  %xmm4,%xmm14
mulsd  %xmm2,%xmm14
movsd  %xmm14,0x38(%rax)
add    $0x58,%rsp
ret
movq   %xmm3,%xmm13
movq   %xmm2,%xmm0
mov    $0x1,%eax
cmp    $0x2,%ecx
jb     1240 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x140>
movupd 0x20(%r9),%xmm1
movsd  0x20(%r10),%xmm2
movsd  0x28(%r10),%xmm3
unpcklpd %xmm2,%xmm2
mulpd  %xmm1,%xmm2
addpd  %xmm2,%xmm13
unpcklpd %xmm3,%xmm3
mulpd  %xmm1,%xmm3
addpd  %xmm3,%xmm0
mov    $0x2,%eax
je     1240 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x140>
movupd 0x40(%r9),%xmm1
movupd 0x40(%r10),%xmm2
movapd %xmm2,%xmm3
movsd  0x50(%r9),%xmm10
unpcklpd %xmm10,%xmm10
mulpd  %xmm2,%xmm10
unpcklpd %xmm2,%xmm2
mulpd  %xmm1,%xmm2
addpd  %xmm2,%xmm13
unpckhpd %xmm3,%xmm3
mulpd  %xmm1,%xmm3
addpd  %xmm3,%xmm0
xorpd  %xmm14,%xmm14
addpd  %xmm14,%xmm10
mov    $0x3,%eax
jmp    1245 <kernel_dgemm_dtrsm_nt_4x2_vs_lib4+0x145>

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

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