void kernel_dtrsm_nn_ru_4x2_vs_lib4(int km, int kn, int kmax, double *A,
                                    double *B, int sdb, int alg, double *C,
                                    double *D, double *E, int use_inv_diag_E,
                                    double *inv_diag_E) {
  const int bs = 4;
  int k;
  double tmp, a_0, a_1, a_2, a_3, b_0, b_1, e_00, e_01, e_11,
      d_00 = 0, d_01 = 0, d_10 = 0, d_11 = 0, d_20 = 0, d_21 = 0, d_30 = 0,
      d_31 = 0;
  if (kmax <= 0)
    goto add;
  for (k = 0; k < kmax - 3; k += 4) {
    a_0 = A[0 + bs * 0];
    a_1 = A[1 + bs * 0];
    a_2 = A[2 + bs * 0];
    a_3 = A[3 + bs * 0];
    b_0 = B[0 + bs * 0];
    b_1 = B[0 + bs * 1];
    d_00 -= a_0 * b_0;
    d_10 -= a_1 * b_0;
    d_20 -= a_2 * b_0;
    d_30 -= a_3 * b_0;
    d_01 -= a_0 * b_1;
    d_11 -= a_1 * b_1;
    d_21 -= a_2 * b_1;
    d_31 -= a_3 * b_1;
    a_0 = A[0 + bs * 1];
    a_1 = A[1 + bs * 1];
    a_2 = A[2 + bs * 1];
    a_3 = A[3 + bs * 1];
    b_0 = B[1 + bs * 0];
    b_1 = B[1 + bs * 1];
    d_00 -= a_0 * b_0;
    d_10 -= a_1 * b_0;
    d_20 -= a_2 * b_0;
    d_30 -= a_3 * b_0;
    d_01 -= a_0 * b_1;
    d_11 -= a_1 * b_1;
    d_21 -= a_2 * b_1;
    d_31 -= a_3 * b_1;
    a_0 = A[0 + bs * 2];
    a_1 = A[1 + bs * 2];
    a_2 = A[2 + bs * 2];
    a_3 = A[3 + bs * 2];
    b_0 = B[2 + bs * 0];
    b_1 = B[2 + bs * 1];
    d_00 -= a_0 * b_0;
    d_10 -= a_1 * b_0;
    d_20 -= a_2 * b_0;
    d_30 -= a_3 * b_0;
    d_01 -= a_0 * b_1;
    d_11 -= a_1 * b_1;
    d_21 -= a_2 * b_1;
    d_31 -= a_3 * b_1;
    a_0 = A[0 + bs * 3];
    a_1 = A[1 + bs * 3];
    a_2 = A[2 + bs * 3];
    a_3 = A[3 + bs * 3];
    b_0 = B[3 + bs * 0];
    b_1 = B[3 + bs * 1];
    d_00 -= a_0 * b_0;
    d_10 -= a_1 * b_0;
    d_20 -= a_2 * b_0;
    d_30 -= a_3 * b_0;
    d_01 -= a_0 * b_1;
    d_11 -= a_1 * b_1;
    d_21 -= a_2 * b_1;
    d_31 -= a_3 * b_1;
    A += 16;
    B += 4 * sdb;
  }
  for (; k < kmax; k++) {
    a_0 = A[0 + bs * 0];
    a_1 = A[1 + bs * 0];
    a_2 = A[2 + bs * 0];
    a_3 = A[3 + bs * 0];
    b_0 = B[0 + bs * 0];
    b_1 = B[0 + bs * 1];
    d_00 -= a_0 * b_0;
    d_10 -= a_1 * b_0;
    d_20 -= a_2 * b_0;
    d_30 -= a_3 * b_0;
    d_01 -= a_0 * b_1;
    d_11 -= a_1 * b_1;
    d_21 -= a_2 * b_1;
    d_31 -= a_3 * b_1;
    A += 4;
    B += 1;
  }
add:
  if (alg != 0) {
    d_00 += C[0 + bs * 0];
    d_10 += C[1 + bs * 0];
    d_20 += C[2 + bs * 0];
    d_30 += C[3 + bs * 0];
    d_01 += C[0 + bs * 1];
    d_11 += C[1 + bs * 1];
    d_21 += C[2 + bs * 1];
    d_31 += C[3 + bs * 1];
  }
  if (use_inv_diag_E) {
    e_00 = inv_diag_E[0];
    d_00 *= e_00;
    d_10 *= e_00;
    d_20 *= e_00;
    d_30 *= e_00;
    D[0 + bs * 0] = d_00;
    D[1 + bs * 0] = d_10;
    D[2 + bs * 0] = d_20;
    if (km >= 4)
      D[3 + bs * 0] = d_30;
    if (kn < 2)
      return;
    e_01 = E[0 + bs * 1];
    e_11 = inv_diag_E[1];
    d_01 -= d_00 * e_01;
    d_11 -= d_10 * e_01;
    d_21 -= d_20 * e_01;
    d_31 -= d_30 * e_01;
    d_01 *= e_11;
    d_11 *= e_11;
    d_21 *= e_11;
    d_31 *= e_11;
    D[0 + bs * 1] = d_01;
    D[1 + bs * 1] = d_11;
    D[2 + bs * 1] = d_21;
    if (km >= 4)
      D[3 + bs * 1] = d_31;
  } else {
    e_00 = 1.0 / E[0 + bs * 0];
    d_00 *= e_00;
    d_10 *= e_00;
    d_20 *= e_00;
    d_30 *= e_00;
    D[0 + bs * 0] = d_00;
    D[1 + bs * 0] = d_10;
    D[2 + bs * 0] = d_20;
    if (km >= 4)
      D[3 + bs * 0] = d_30;
    if (kn < 2)
      return;
    e_01 = E[0 + bs * 1];
    e_11 = 1.0 / E[1 + bs * 1];
    d_01 -= d_00 * e_01;
    d_11 -= d_10 * e_01;
    d_21 -= d_20 * e_01;
    d_31 -= d_30 * e_01;
    d_01 *= e_11;
    d_11 *= e_11;
    d_21 *= e_11;
    d_31 *= e_11;
    D[0 + bs * 1] = d_01;
    D[1 + bs * 1] = d_11;
    D[2 + bs * 1] = d_21;
    if (km >= 4)
      D[3 + bs * 1] = d_31;
  }
  return;
}


x86 assembly (clang, -O0):
<kernel_dtrsm_nn_ru_4x2_vs_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0x4,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
cmpl   $0x0,-0xc(%rbp)
jg     11a1 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xa1>
jmp    1cb1 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xbb1>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1a5b <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x95b>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%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  -0x60(%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
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%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  -0x60(%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
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%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  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%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  -0x60(%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
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%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  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%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  -0x60(%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
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%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  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    11a8 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xa8>
jmp    1a60 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x960>
mov    -0x2c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1cac <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xbac>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%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  -0x60(%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
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%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  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1a60 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x960>
jmp    1cb1 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xbb1>
cmpl   $0x0,0x10(%rbp)
je     1d82 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xc82>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
addsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
addsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
mov    0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
addsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
cmpl   $0x0,0x30(%rbp)
je     1ffc <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xefc>
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     1e3a <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xd3a>
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
cmpl   $0x2,-0x8(%rbp)
jge    1e49 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xd49>
jmp    2281 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x1181>
mov    0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x78(%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  -0x98(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x30(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     1ff7 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xef7>
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x38(%rax)
jmp    227c <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x117c>
mov    0x28(%rbp),%rax
movsd  0xff8(%rip),%xmm0
divsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     20b2 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xfb2>
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
cmpl   $0x2,-0x8(%rbp)
jge    20c1 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0xfc1>
jmp    2281 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x1181>
mov    0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    0x28(%rbp),%rax
movsd  0xf25(%rip),%xmm0
divsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x78(%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  -0x98(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0x78(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x30(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     2277 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x1177>
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x38(%rax)
jmp    227c <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x117c>
jmp    2281 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x1181>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dtrsm_nn_ru_4x2_vs_lib4>:
push   %rax
mov    0x10(%rsp),%r10d
test   %edx,%edx
jle    1424 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x324>
cmp    $0x4,%edx
jb     143c <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x33c>
lea    -0x3(%rdx),%r11d
shl    $0x2,%r9d
movslq %r9d,%r9
shl    $0x3,%r9
xorpd  %xmm5,%xmm5
xor    %eax,%eax
xorpd  %xmm10,%xmm10
xorpd  %xmm11,%xmm11
xorpd  %xmm0,%xmm0
nopw   0x0(%rax,%rax,1)
movapd %xmm11,-0x30(%rsp)
movapd %xmm10,-0x20(%rsp)
movapd %xmm5,-0x10(%rsp)
movupd (%rcx),%xmm2
movupd 0x10(%rcx),%xmm4
movupd 0x20(%rcx),%xmm8
movupd 0x30(%rcx),%xmm3
movsd  (%r8),%xmm6
movsd  0x8(%r8),%xmm15
movsd  0x10(%r8),%xmm12
movapd %xmm6,%xmm1
unpcklpd %xmm6,%xmm1
mulpd  %xmm2,%xmm1
subpd  %xmm1,%xmm0
movapd %xmm4,%xmm1
unpckhpd %xmm4,%xmm1
movapd %xmm4,-0x50(%rsp)
unpcklpd %xmm4,%xmm4
movsd  0x20(%r8),%xmm7
unpcklpd %xmm7,%xmm6
unpcklpd %xmm7,%xmm7
movapd %xmm2,-0x70(%rsp)
mulpd  %xmm7,%xmm2
subpd  %xmm2,%xmm5
mulpd  %xmm6,%xmm4
subpd  %xmm4,%xmm10
mulpd  %xmm6,%xmm1
subpd  %xmm1,%xmm11
movapd %xmm15,%xmm1
unpcklpd %xmm15,%xmm1
mulpd  %xmm8,%xmm1
subpd  %xmm1,%xmm0
movapd %xmm3,%xmm1
unpcklpd %xmm3,%xmm1
movapd %xmm3,-0x40(%rsp)
movapd %xmm3,%xmm2
unpckhpd %xmm3,%xmm2
movsd  0x28(%r8),%xmm9
unpcklpd %xmm9,%xmm15
unpcklpd %xmm9,%xmm9
movapd %xmm8,-0x60(%rsp)
movapd %xmm8,%xmm4
mulpd  %xmm9,%xmm4
subpd  %xmm4,%xmm5
mulpd  %xmm15,%xmm2
subpd  %xmm2,%xmm11
mulpd  %xmm15,%xmm1
subpd  %xmm1,%xmm10
movupd 0x40(%rcx),%xmm3
movupd 0x50(%rcx),%xmm2
movapd %xmm12,%xmm1
unpcklpd %xmm12,%xmm1
mulpd  %xmm3,%xmm1
subpd  %xmm1,%xmm0
movsd  0x30(%r8),%xmm8
unpcklpd %xmm8,%xmm12
unpcklpd %xmm8,%xmm8
movapd %xmm3,-0x80(%rsp)
movapd %xmm3,%xmm1
mulpd  %xmm8,%xmm1
subpd  %xmm1,%xmm5
movapd %xmm2,%xmm1
unpcklpd %xmm2,%xmm1
mulpd  %xmm12,%xmm1
subpd  %xmm1,%xmm10
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
mulpd  %xmm12,%xmm1
subpd  %xmm1,%xmm11
movsd  0x18(%r8),%xmm13
movapd %xmm13,%xmm1
unpcklpd %xmm13,%xmm1
movupd 0x60(%rcx),%xmm4
mulpd  %xmm4,%xmm1
subpd  %xmm1,%xmm0
movsd  0x38(%r8),%xmm14
unpcklpd %xmm14,%xmm13
unpcklpd %xmm14,%xmm14
movapd %xmm4,%xmm1
mulpd  %xmm14,%xmm1
subpd  %xmm1,%xmm5
movupd 0x70(%rcx),%xmm3
movapd %xmm3,%xmm1
unpckhpd %xmm3,%xmm1
mulpd  %xmm13,%xmm1
subpd  %xmm1,%xmm11
movapd %xmm3,%xmm1
unpcklpd %xmm3,%xmm1
mulpd  %xmm13,%xmm1
subpd  %xmm1,%xmm10
sub    $0xffffffffffffff80,%rcx
add    $0x4,%eax
add    %r9,%r8
cmp    %r11d,%eax
jl     1140 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x40>
movapd 0xcf4(%rip),%xmm1
movapd -0x70(%rsp),%xmm5
xorpd  %xmm1,%xmm5
movapd %xmm5,-0x70(%rsp)
movapd -0x50(%rsp),%xmm11
xorpd  %xmm1,%xmm11
movapd -0x60(%rsp),%xmm5
xorpd  %xmm1,%xmm5
movapd %xmm5,-0x60(%rsp)
movapd -0x40(%rsp),%xmm10
xorpd  %xmm1,%xmm10
movapd -0x80(%rsp),%xmm5
xorpd  %xmm1,%xmm5
movapd %xmm5,-0x80(%rsp)
xorpd  %xmm1,%xmm2
xorpd  %xmm1,%xmm4
xorpd  %xmm1,%xmm3
pshufd $0xee,%xmm11,%xmm1
mulpd  %xmm6,%xmm1
addpd  -0x30(%rsp),%xmm1
pshufd $0x44,%xmm11,%xmm5
mulpd  %xmm6,%xmm5
addpd  -0x20(%rsp),%xmm5
pshufd $0x44,%xmm10,%xmm6
mulpd  %xmm15,%xmm6
addpd  %xmm5,%xmm6
pshufd $0xee,%xmm10,%xmm5
mulpd  %xmm15,%xmm5
addpd  %xmm1,%xmm5
pshufd $0xee,%xmm2,%xmm1
mulpd  %xmm12,%xmm1
addpd  %xmm5,%xmm1
pshufd $0x44,%xmm2,%xmm2
mulpd  %xmm12,%xmm2
addpd  %xmm6,%xmm2
pshufd $0x44,%xmm3,%xmm11
mulpd  %xmm13,%xmm11
addpd  %xmm2,%xmm11
pshufd $0xee,%xmm3,%xmm10
mulpd  %xmm13,%xmm10
addpd  %xmm1,%xmm10
movapd -0x70(%rsp),%xmm1
mulpd  %xmm7,%xmm1
addpd  -0x10(%rsp),%xmm1
movapd -0x60(%rsp),%xmm2
mulpd  %xmm9,%xmm2
addpd  %xmm1,%xmm2
movapd -0x80(%rsp),%xmm1
mulpd  %xmm8,%xmm1
addpd  %xmm2,%xmm1
mulpd  %xmm14,%xmm4
addpd  %xmm1,%xmm4
mov    %edx,%eax
and    $0xfffffffc,%eax
movapd %xmm4,%xmm12
cmp    %edx,%eax
jl     1459 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x359>
jmp    1537 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x437>
xorpd  %xmm0,%xmm0
xorpd  %xmm12,%xmm12
xorpd  %xmm11,%xmm11
xorpd  %xmm10,%xmm10
jmp    1537 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x437>
xorpd  %xmm0,%xmm0
xor    %eax,%eax
xorpd  %xmm12,%xmm12
xorpd  %xmm11,%xmm11
xorpd  %xmm10,%xmm10
cmp    %edx,%eax
jge    1537 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x437>
sub    %eax,%edx
xor    %eax,%eax
nopl   (%rax)
movapd %xmm10,%xmm13
movapd %xmm11,%xmm14
movapd %xmm12,%xmm8
movapd %xmm0,%xmm9
movupd (%rcx),%xmm15
movupd 0x10(%rcx),%xmm4
movsd  (%r8,%rax,8),%xmm3
movsd  0x20(%r8,%rax,8),%xmm7
movapd %xmm3,%xmm6
unpcklpd %xmm3,%xmm6
movapd %xmm15,%xmm5
mulpd  %xmm6,%xmm5
subpd  %xmm5,%xmm0
movapd %xmm4,%xmm5
unpcklpd %xmm4,%xmm5
movapd %xmm4,%xmm1
unpckhpd %xmm4,%xmm1
unpcklpd %xmm7,%xmm3
unpcklpd %xmm7,%xmm7
movapd %xmm15,%xmm2
mulpd  %xmm7,%xmm2
subpd  %xmm2,%xmm12
mulpd  %xmm3,%xmm1
subpd  %xmm1,%xmm10
mulpd  %xmm3,%xmm5
subpd  %xmm5,%xmm11
add    $0x1,%rax
add    $0x20,%rcx
cmp    %eax,%edx
jne    1460 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x360>
movapd 0xb10(%rip),%xmm0
xorpd  %xmm0,%xmm15
xorpd  %xmm0,%xmm4
pshufd $0xee,%xmm4,%xmm10
pshufd $0x44,%xmm4,%xmm11
mulpd  %xmm3,%xmm11
addpd  %xmm14,%xmm11
mulpd  %xmm3,%xmm10
addpd  %xmm13,%xmm10
mulpd  %xmm15,%xmm7
addpd  %xmm8,%xmm7
mulpd  %xmm6,%xmm15
addpd  %xmm9,%xmm15
movapd %xmm15,%xmm0
movapd %xmm7,%xmm12
mov    0x30(%rsp),%edx
test   %r10d,%r10d
je     1575 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x475>
mov    0x18(%rsp),%rax
movupd (%rax),%xmm1
addpd  %xmm1,%xmm0
movupd 0x20(%rax),%xmm1
addpd  %xmm1,%xmm12
movsd  0x10(%rax),%xmm1
movhpd 0x30(%rax),%xmm1
movsd  0x18(%rax),%xmm2
movhpd 0x38(%rax),%xmm2
addpd  %xmm2,%xmm10
addpd  %xmm1,%xmm11
mov    0x28(%rsp),%rcx
mov    0x20(%rsp),%rax
test   %edx,%edx
je     1613 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x513>
mov    0x38(%rsp),%rdx
movsd  (%rdx),%xmm4
movapd %xmm4,%xmm1
unpcklpd %xmm4,%xmm1
mulpd  %xmm1,%xmm0
movapd %xmm11,%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm10,%xmm4
movupd %xmm0,(%rax)
movsd  %xmm1,0x10(%rax)
cmp    $0x4,%edi
jl     15bd <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x4bd>
movsd  %xmm4,0x18(%rax)
cmp    $0x2,%esi
jl     1611 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x511>
movsd  0x20(%rcx),%xmm2
movsd  0x8(%rdx),%xmm5
movapd %xmm2,%xmm3
unpcklpd %xmm2,%xmm3
mulpd  %xmm3,%xmm0
subpd  %xmm0,%xmm12
unpckhpd %xmm11,%xmm11
mulsd  %xmm2,%xmm1
subsd  %xmm1,%xmm11
movapd %xmm5,%xmm0
unpcklpd %xmm5,%xmm0
mulpd  %xmm12,%xmm0
mulsd  %xmm5,%xmm11
movupd %xmm0,0x20(%rax)
movsd  %xmm11,0x30(%rax)
cmp    $0x3,%edi
jg     16a4 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x5a4>
pop    %rax
ret
movsd  0x9f5(%rip),%xmm5
movapd %xmm5,%xmm4
divsd  (%rcx),%xmm4
movapd %xmm4,%xmm1
unpcklpd %xmm4,%xmm1
mulpd  %xmm1,%xmm0
movapd %xmm11,%xmm1
mulsd  %xmm4,%xmm1
mulsd  %xmm10,%xmm4
movupd %xmm0,(%rax)
movsd  %xmm1,0x10(%rax)
cmp    $0x4,%edi
jl     1650 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x550>
movsd  %xmm4,0x18(%rax)
cmp    $0x2,%esi
jl     1611 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x511>
movsd  0x20(%rcx),%xmm2
divsd  0x28(%rcx),%xmm5
movapd %xmm2,%xmm3
unpcklpd %xmm2,%xmm3
mulpd  %xmm3,%xmm0
subpd  %xmm0,%xmm12
unpckhpd %xmm11,%xmm11
mulsd  %xmm2,%xmm1
subsd  %xmm1,%xmm11
movapd %xmm5,%xmm0
unpcklpd %xmm5,%xmm0
mulpd  %xmm12,%xmm0
mulsd  %xmm5,%xmm11
movupd %xmm0,0x20(%rax)
movsd  %xmm11,0x30(%rax)
cmp    $0x4,%edi
jl     1611 <kernel_dtrsm_nn_ru_4x2_vs_lib4+0x511>
mulsd  %xmm2,%xmm4
unpckhpd %xmm10,%xmm10
subsd  %xmm4,%xmm10
mulsd  %xmm5,%xmm10
movsd  %xmm10,0x38(%rax)
pop    %rax
ret

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

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