void kernel_dsyttmm_ul_nt_4x4_lib4(int kmax, double *A, double *B, double *C,
                                   double *D, int alg) {
  const int lda = 4;
  const int ldb = 4;
  const int ldc = 4;
  int k;
  double a_0, a_1, a_2, a_3, b_0, b_1, b_2, b_3,
      c_00 = 0, c_10 = 0, c_11 = 0, c_20 = 0, c_21 = 0, c_22 = 0, c_30 = 0,
      c_31 = 0, c_32 = 0, c_33 = 0;
  a_0 = A[0 + lda * 0];
  b_0 = B[0 + ldb * 0];
  c_00 += a_0 * b_0;
  a_0 = A[0 + lda * 1];
  a_1 = A[1 + lda * 1];
  b_0 = B[0 + ldb * 1];
  b_1 = B[1 + ldb * 1];
  c_00 += a_0 * b_0;
  c_10 += a_1 * b_0;
  c_11 += a_1 * b_1;
  a_0 = A[0 + lda * 2];
  a_1 = A[1 + lda * 2];
  a_2 = A[2 + lda * 2];
  b_0 = B[0 + ldb * 2];
  b_1 = B[1 + ldb * 2];
  b_2 = B[2 + ldb * 2];
  c_00 += a_0 * b_0;
  c_10 += a_1 * b_0;
  c_20 += a_2 * b_0;
  c_11 += a_1 * b_1;
  c_21 += a_2 * b_1;
  c_22 += a_2 * b_2;
  a_0 = A[0 + lda * 3];
  a_1 = A[1 + lda * 3];
  a_2 = A[2 + lda * 3];
  a_3 = A[3 + lda * 3];
  b_0 = B[0 + ldb * 3];
  b_1 = B[1 + ldb * 3];
  b_2 = B[2 + ldb * 3];
  b_3 = B[3 + ldb * 3];
  c_00 += a_0 * b_0;
  c_10 += a_1 * b_0;
  c_20 += a_2 * b_0;
  c_30 += a_3 * b_0;
  c_11 += a_1 * b_1;
  c_21 += a_2 * b_1;
  c_31 += a_3 * b_1;
  c_22 += a_2 * b_2;
  c_32 += a_3 * b_2;
  c_33 += a_3 * b_3;
  k = 4;
  A += 16;
  for (; k < kmax - 3; k += 4) {
    a_0 = A[0 + lda * 0];
    a_1 = A[1 + lda * 0];
    a_2 = A[2 + lda * 0];
    a_3 = A[3 + lda * 0];
    b_0 = B[0 + ldb * 0];
    b_1 = B[1 + ldb * 0];
    b_2 = B[2 + ldb * 0];
    b_3 = B[3 + ldb * 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_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    a_0 = A[0 + lda * 1];
    a_1 = A[1 + lda * 1];
    a_2 = A[2 + lda * 1];
    a_3 = A[3 + lda * 1];
    b_0 = B[0 + ldb * 1];
    b_1 = B[1 + ldb * 1];
    b_2 = B[2 + ldb * 1];
    b_3 = B[3 + ldb * 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_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    a_0 = A[0 + lda * 2];
    a_1 = A[1 + lda * 2];
    a_2 = A[2 + lda * 2];
    a_3 = A[3 + lda * 2];
    b_0 = B[0 + ldb * 2];
    b_1 = B[1 + ldb * 2];
    b_2 = B[2 + ldb * 2];
    b_3 = B[3 + ldb * 2];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * a_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    a_0 = A[0 + lda * 3];
    a_1 = A[1 + lda * 3];
    a_2 = A[2 + lda * 3];
    a_3 = A[3 + lda * 3];
    b_0 = B[0 + ldb * 3];
    b_1 = B[1 + ldb * 3];
    b_2 = B[2 + ldb * 3];
    b_3 = B[3 + ldb * 3];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    A += 16;
  }
  for (; k < kmax; k++) {
    a_0 = A[0 + lda * 0];
    a_1 = A[1 + lda * 0];
    a_2 = A[2 + lda * 0];
    a_3 = A[3 + lda * 0];
    b_0 = B[0 + ldb * 0];
    b_1 = B[1 + ldb * 0];
    b_2 = B[2 + ldb * 0];
    b_3 = B[3 + ldb * 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_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    A += 4;
  }
  double d_00, d_10, d_11, d_20, d_21, d_22, d_30, d_31, d_32, d_33;
  if (alg == 0) {
    D[0 + ldc * 0] = c_00;
    D[1 + ldc * 0] = c_10;
    D[2 + ldc * 0] = c_20;
    D[3 + ldc * 0] = c_30;
    D[1 + ldc * 1] = c_11;
    D[2 + ldc * 1] = c_21;
    D[3 + ldc * 1] = c_31;
    D[2 + ldc * 2] = c_22;
    D[3 + ldc * 2] = c_32;
    D[3 + ldc * 3] = c_33;
  } else {
    d_00 = C[0 + ldc * 0];
    d_10 = C[1 + ldc * 0];
    d_20 = C[2 + ldc * 0];
    d_30 = C[3 + ldc * 0];
    d_11 = C[1 + ldc * 1];
    d_21 = C[2 + ldc * 1];
    d_31 = C[3 + ldc * 1];
    d_22 = C[2 + ldc * 2];
    d_32 = C[3 + ldc * 2];
    d_33 = C[3 + ldc * 3];
    if (alg == 1) {
      d_00 += c_00;
      d_10 += c_10;
      d_20 += c_20;
      d_30 += c_30;
      d_11 += c_11;
      d_21 += c_21;
      d_31 += c_31;
      d_22 += c_22;
      d_32 += c_32;
      d_33 += c_33;
    } else {
      d_00 -= c_00;
      d_10 -= c_10;
      d_20 -= c_20;
      d_30 -= c_30;
      d_11 -= c_11;
      d_21 -= c_21;
      d_31 -= c_31;
      d_22 -= c_22;
      d_32 -= c_32;
      d_33 -= c_33;
    }
    D[0 + ldc * 0] = d_00;
    D[1 + ldc * 0] = d_10;
    D[2 + ldc * 0] = d_20;
    D[3 + ldc * 0] = d_30;
    D[1 + ldc * 1] = d_11;
    D[2 + ldc * 1] = d_21;
    D[3 + ldc * 1] = d_31;
    D[2 + ldc * 2] = d_22;
    D[3 + ldc * 2] = d_32;
    D[3 + ldc * 3] = d_33;
  }
}


x86 assembly (clang, -O0):
<kernel_dsyttmm_ul_nt_4x4_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
movl   $0x4,-0x30(%rbp)
movl   $0x4,-0x34(%rbp)
movl   $0x4,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movl   $0x4,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x3c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1cb3 <kernel_dsyttmm_ul_nt_4x4_lib4+0xbb3>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x3c(%rbp)
jmp    1578 <kernel_dsyttmm_ul_nt_4x4_lib4+0x478>
jmp    1cb8 <kernel_dsyttmm_ul_nt_4x4_lib4+0xbb8>
mov    -0x3c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1ea0 <kernel_dsyttmm_ul_nt_4x4_lib4+0xda0>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x10(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1cb8 <kernel_dsyttmm_ul_nt_4x4_lib4+0xbb8>
cmpl   $0x0,-0x2c(%rbp)
jne    1f58 <kernel_dsyttmm_ul_nt_4x4_lib4+0xe58>
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    22c1 <kernel_dsyttmm_ul_nt_4x4_lib4+0x11c1>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x120(%rbp)
cmpl   $0x1,-0x2c(%rbp)
jne    2100 <kernel_dsyttmm_ul_nt_4x4_lib4+0x1000>
movsd  -0x88(%rbp),%xmm0
ff
addsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
addsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
addsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
addsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
addsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
addsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
addsd  -0x120(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
jmp    2218 <kernel_dsyttmm_ul_nt_4x4_lib4+0x1118>
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0xf0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x108(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xf8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0x110(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x100(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0x118(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xd0(%rbp),%xmm1
ff
movsd  -0x120(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x108(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xf8(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x110(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x100(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x118(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0x120(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x78(%rax)
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dsyttmm_ul_nt_4x4_lib4>:
sub    $0xa8,%rsp
movsd  (%rdx),%xmm15
movsd  0x20(%rdx),%xmm8
movsd  (%rsi),%xmm0
mulsd  %xmm15,%xmm0
xorpd  %xmm9,%xmm9
addsd  %xmm9,%xmm0
movsd  0x28(%rdx),%xmm5
unpcklpd %xmm8,%xmm8
movq   %xmm0,%xmm2
movupd 0x20(%rsi),%xmm3
movupd 0x40(%rsi),%xmm0
movapd %xmm3,%xmm4
mulpd  %xmm8,%xmm4
addpd  %xmm2,%xmm4
unpckhpd %xmm3,%xmm3
movapd %xmm5,%xmm10
mulsd  %xmm5,%xmm3
addsd  %xmm9,%xmm3
movsd  0x50(%rsi),%xmm2
movsd  0x40(%rdx),%xmm12
movsd  0x48(%rdx),%xmm7
movsd  0x50(%rdx),%xmm6
movapd %xmm12,%xmm1
unpcklpd %xmm12,%xmm1
movapd %xmm0,%xmm5
movapd %xmm1,-0x60(%rsp)
mulpd  %xmm1,%xmm5
addpd  %xmm4,%xmm5
movapd %xmm2,%xmm4
mulsd  %xmm12,%xmm4
addsd  %xmm9,%xmm4
shufpd $0x1,%xmm2,%xmm0
movapd %xmm7,-0x70(%rsp)
unpcklpd %xmm7,%xmm7
movq   %xmm3,%xmm3
movapd %xmm7,0x90(%rsp)
mulpd  %xmm7,%xmm0
addpd  %xmm3,%xmm0
movapd %xmm6,-0x80(%rsp)
mulsd  %xmm6,%xmm2
addsd  %xmm9,%xmm2
movupd 0x60(%rsi),%xmm1
movupd 0x70(%rsi),%xmm7
movsd  0x60(%rdx),%xmm6
unpcklpd %xmm6,%xmm6
movapd %xmm1,%xmm13
mulpd  %xmm6,%xmm13
addpd  %xmm5,%xmm13
movq   %xmm4,%xmm3
movapd %xmm7,%xmm14
mulpd  %xmm6,%xmm14
addpd  %xmm3,%xmm14
movsd  0x68(%rdx),%xmm3
shufpd $0x1,%xmm7,%xmm1
movapd %xmm3,%xmm4
unpcklpd %xmm3,%xmm4
mulpd  %xmm4,%xmm1
addpd  %xmm0,%xmm1
movsd  0x70(%rdx),%xmm5
unpcklpd %xmm5,%xmm5
movq   %xmm2,%xmm0
movapd %xmm7,%xmm11
mulpd  %xmm5,%xmm11
addpd  %xmm0,%xmm11
movsd  0x78(%rdx),%xmm0
unpcklpd %xmm0,%xmm3
unpckhpd %xmm7,%xmm7
mulpd  %xmm3,%xmm7
xorpd  %xmm9,%xmm9
addpd  %xmm7,%xmm9
sub    $0xffffffffffffff80,%rsi
mov    $0x4,%eax
cmp    $0x8,%edi
jge    1278 <kernel_dsyttmm_ul_nt_4x4_lib4+0x178>
cmp    %edi,%eax
jl     1523 <kernel_dsyttmm_ul_nt_4x4_lib4+0x423>
test   %r9d,%r9d
jne    1632 <kernel_dsyttmm_ul_nt_4x4_lib4+0x532>
jmp    16a7 <kernel_dsyttmm_ul_nt_4x4_lib4+0x5a7>
lea    -0x3(%rdi),%r10d
movapd %xmm15,-0x50(%rsp)
unpcklpd %xmm15,%xmm15
movapd %xmm15,0x70(%rsp)
movapd %xmm10,%xmm15
unpcklpd %xmm10,%xmm10
movapd %xmm10,0x80(%rsp)
movsd  0x8(%rdx),%xmm7
movsd  0x10(%rdx),%xmm10
movsd  0x30(%rdx),%xmm2
movapd %xmm7,%xmm0
unpcklpd %xmm7,%xmm0
movapd %xmm0,0x20(%rsp)
movaps -0x80(%rsp),%xmm0
movlhps %xmm0,%xmm0
movaps %xmm0,-0x80(%rsp)
unpcklpd %xmm2,%xmm2
movapd %xmm2,0x30(%rsp)
movapd -0x70(%rsp),%xmm0
movhpd 0x58(%rdx),%xmm0
movapd %xmm0,-0x70(%rsp)
movhpd 0x38(%rdx),%xmm15
movapd %xmm15,0x60(%rsp)
unpcklpd %xmm10,%xmm10
movapd %xmm10,0x40(%rsp)
movhpd 0x18(%rdx),%xmm7
movapd %xmm7,0x50(%rsp)
mov    $0x4,%eax
movapd %xmm8,0x10(%rsp)
movapd %xmm12,(%rsp)
movapd %xmm6,-0x20(%rsp)
movapd %xmm3,-0x40(%rsp)
movapd %xmm4,-0x10(%rsp)
movapd %xmm5,-0x30(%rsp)
nopw   0x0(%rax,%rax,1)
movupd (%rsi),%xmm2
movupd 0x10(%rsi),%xmm0
movapd %xmm13,%xmm4
movupd 0x20(%rsi),%xmm13
movupd 0x30(%rsi),%xmm8
movapd %xmm2,%xmm3
movapd 0x70(%rsp),%xmm5
mulpd  %xmm5,%xmm3
addpd  %xmm4,%xmm3
movapd %xmm0,%xmm4
mulpd  %xmm5,%xmm4
addpd  %xmm14,%xmm4
shufpd $0x1,%xmm0,%xmm2
mulpd  0x20(%rsp),%xmm2
addpd  %xmm1,%xmm2
movapd %xmm0,%xmm5
mulpd  0x40(%rsp),%xmm5
addpd  %xmm11,%xmm5
unpckhpd %xmm0,%xmm0
mulpd  0x50(%rsp),%xmm0
addpd  %xmm9,%xmm0
movapd %xmm13,%xmm6
movapd 0x10(%rsp),%xmm1
mulpd  %xmm1,%xmm6
addpd  %xmm3,%xmm6
movapd %xmm8,%xmm3
mulpd  %xmm1,%xmm3
addpd  %xmm4,%xmm3
shufpd $0x1,%xmm8,%xmm13
mulpd  0x80(%rsp),%xmm13
addpd  %xmm2,%xmm13
movapd %xmm8,%xmm2
mulpd  0x30(%rsp),%xmm2
addpd  %xmm5,%xmm2
unpckhpd %xmm8,%xmm8
mulpd  0x60(%rsp),%xmm8
addpd  %xmm0,%xmm8
movupd 0x40(%rsi),%xmm15
movupd 0x50(%rsi),%xmm12
movapd %xmm15,%xmm0
mulpd  -0x60(%rsp),%xmm0
addpd  %xmm6,%xmm0
movapd (%rsp),%xmm10
unpcklpd %xmm15,%xmm10
mulpd  %xmm12,%xmm10
addpd  %xmm3,%xmm10
shufpd $0x1,%xmm12,%xmm15
mulpd  0x90(%rsp),%xmm15
addpd  %xmm13,%xmm15
movapd %xmm12,%xmm4
mulpd  -0x80(%rsp),%xmm4
addpd  %xmm2,%xmm4
unpckhpd %xmm12,%xmm12
mulpd  -0x70(%rsp),%xmm12
addpd  %xmm8,%xmm12
movupd 0x60(%rsi),%xmm2
movupd 0x70(%rsi),%xmm5
movapd %xmm2,%xmm7
movapd -0x20(%rsp),%xmm1
mulpd  %xmm1,%xmm7
movapd %xmm7,%xmm13
addpd  %xmm0,%xmm13
movapd %xmm5,%xmm3
mulpd  %xmm1,%xmm3
movapd %xmm3,%xmm14
addpd  %xmm10,%xmm14
shufpd $0x1,%xmm5,%xmm2
mulpd  -0x10(%rsp),%xmm2
movapd %xmm2,%xmm1
addpd  %xmm15,%xmm1
movapd %xmm5,%xmm6
mulpd  -0x30(%rsp),%xmm6
movapd %xmm6,%xmm11
addpd  %xmm4,%xmm11
unpckhpd %xmm5,%xmm5
mulpd  -0x40(%rsp),%xmm5
movapd %xmm5,%xmm9
addpd  %xmm12,%xmm9
add    $0x4,%eax
sub    $0xffffffffffffff80,%rsi
cmp    %r10d,%eax
jl     1340 <kernel_dsyttmm_ul_nt_4x4_lib4+0x240>
addpd  %xmm12,%xmm5
addpd  %xmm4,%xmm6
addpd  %xmm15,%xmm2
addpd  %xmm10,%xmm3
addpd  %xmm0,%xmm7
mov    %edi,%eax
and    $0xfffffffc,%eax
movapd %xmm7,%xmm13
movapd %xmm3,%xmm14
movapd %xmm2,%xmm1
movapd %xmm6,%xmm11
movapd %xmm5,%xmm9
movapd -0x50(%rsp),%xmm15
cmp    %edi,%eax
jge    126a <kernel_dsyttmm_ul_nt_4x4_lib4+0x16a>
unpcklpd %xmm15,%xmm15
movsd  0x8(%rdx),%xmm0
movsd  0x10(%rdx),%xmm2
movapd %xmm0,%xmm3
unpcklpd %xmm0,%xmm3
movapd %xmm3,-0x60(%rsp)
unpcklpd %xmm2,%xmm2
movapd %xmm2,-0x80(%rsp)
movhpd 0x18(%rdx),%xmm0
movapd %xmm0,-0x70(%rsp)
sub    %eax,%edi
movapd %xmm1,%xmm3
movapd %xmm15,%xmm8
movapd %xmm13,%xmm5
cs nopw 0x0(%rax,%rax,1)
nop
movapd %xmm9,%xmm0
movapd %xmm11,%xmm7
movapd %xmm3,%xmm12
movapd %xmm14,%xmm15
movapd %xmm5,%xmm13
movupd (%rsi),%xmm1
movupd 0x10(%rsi),%xmm2
movapd %xmm1,%xmm10
mulpd  %xmm8,%xmm10
movapd %xmm10,%xmm5
addpd  %xmm13,%xmm5
movapd %xmm2,%xmm4
mulpd  %xmm8,%xmm4
movapd %xmm4,%xmm14
addpd  %xmm15,%xmm14
shufpd $0x1,%xmm2,%xmm1
mulpd  -0x60(%rsp),%xmm1
movapd %xmm1,%xmm3
addpd  %xmm12,%xmm3
movapd %xmm2,%xmm6
mulpd  -0x80(%rsp),%xmm6
movapd %xmm6,%xmm11
addpd  %xmm7,%xmm11
unpckhpd %xmm2,%xmm2
mulpd  -0x70(%rsp),%xmm2
movapd %xmm2,%xmm9
addpd  %xmm0,%xmm9
add    $0x20,%rsi
add    $0xffffffff,%edi
jne    1570 <kernel_dsyttmm_ul_nt_4x4_lib4+0x470>
addpd  %xmm0,%xmm2
addpd  %xmm7,%xmm6
addpd  %xmm12,%xmm1
addpd  %xmm15,%xmm4
addpd  %xmm13,%xmm10
movapd %xmm10,%xmm13
movapd %xmm4,%xmm14
movapd %xmm6,%xmm11
movapd %xmm2,%xmm9
test   %r9d,%r9d
je     16a7 <kernel_dsyttmm_ul_nt_4x4_lib4+0x5a7>
movupd (%rcx),%xmm5
movupd 0x10(%rcx),%xmm3
movupd 0x28(%rcx),%xmm2
movsd  0x38(%rcx),%xmm0
movupd 0x50(%rcx),%xmm6
movsd  0x78(%rcx),%xmm4
cmp    $0x1,%r9d
jne    1673 <kernel_dsyttmm_ul_nt_4x4_lib4+0x573>
addpd  %xmm5,%xmm13
addpd  %xmm3,%xmm14
addpd  %xmm2,%xmm1
addpd  %xmm6,%xmm11
unpcklpd %xmm4,%xmm0
addpd  %xmm0,%xmm9
jmp    16a7 <kernel_dsyttmm_ul_nt_4x4_lib4+0x5a7>
subpd  %xmm13,%xmm5
subpd  %xmm14,%xmm3
subpd  %xmm1,%xmm2
subpd  %xmm11,%xmm6
unpcklpd %xmm4,%xmm0
subpd  %xmm9,%xmm0
movapd %xmm5,%xmm13
movapd %xmm3,%xmm14
movapd %xmm2,%xmm1
movapd %xmm6,%xmm11
movapd %xmm0,%xmm9
movupd %xmm13,(%r8)
movupd %xmm14,0x10(%r8)
movupd %xmm1,0x28(%r8)
movlpd %xmm9,0x38(%r8)
movupd %xmm11,0x50(%r8)
movhpd %xmm9,0x78(%r8)
add    $0xa8,%rsp
ret

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

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