void kernel_dlauum_nt_4x4_lib4(int kmax, double *A, double *B, int alg,
                               double *C, double *D) {
  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;
  B += 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;
    B += 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;
    B += 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_dlauum_nt_4x4_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x4,-0x34(%rbp)
movl   $0x4,-0x38(%rbp)
movl   $0x4,-0x3c(%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,-0x40(%rbp)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1cce <kernel_dlauum_nt_4x4_lib4+0xbce>
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    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x40(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x40(%rbp)
jmp    1585 <kernel_dlauum_nt_4x4_lib4+0x485>
jmp    1cd3 <kernel_dlauum_nt_4x4_lib4+0xbd3>
mov    -0x40(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1ec7 <kernel_dlauum_nt_4x4_lib4+0xdc7>
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    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1cd3 <kernel_dlauum_nt_4x4_lib4+0xbd3>
cmpl   $0x0,-0x1c(%rbp)
jne    1f7f <kernel_dlauum_nt_4x4_lib4+0xe7f>
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    22e8 <kernel_dlauum_nt_4x4_lib4+0x11e8>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x100(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
cmpl   $0x1,-0x1c(%rbp)
jne    2127 <kernel_dlauum_nt_4x4_lib4+0x1027>
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    223f <kernel_dlauum_nt_4x4_lib4+0x113f>
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    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x108(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xf8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x110(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x100(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x118(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0x120(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x78(%rax)
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dlauum_nt_4x4_lib4>:
movsd  (%rsi),%xmm0
mulsd  (%rdx),%xmm0
xorpd  %xmm1,%xmm1
addsd  %xmm1,%xmm0
movupd 0x20(%rsi),%xmm2
movsd  0x20(%rdx),%xmm4
unpcklpd %xmm4,%xmm4
movq   %xmm0,%xmm0
mulpd  %xmm2,%xmm4
unpckhpd %xmm2,%xmm2
mulsd  0x28(%rdx),%xmm2
addpd  %xmm0,%xmm4
addsd  %xmm1,%xmm2
movupd 0x40(%rsi),%xmm5
movsd  0x50(%rsi),%xmm0
movsd  0x40(%rdx),%xmm3
movapd %xmm3,%xmm6
unpcklpd %xmm3,%xmm6
mulpd  %xmm5,%xmm6
addpd  %xmm4,%xmm6
mulsd  %xmm0,%xmm3
addsd  %xmm1,%xmm3
shufpd $0x1,%xmm0,%xmm5
movsd  0x48(%rdx),%xmm4
unpcklpd %xmm4,%xmm4
mulpd  %xmm5,%xmm4
movq   %xmm2,%xmm2
addpd  %xmm4,%xmm2
mulsd  0x50(%rdx),%xmm0
addsd  %xmm1,%xmm0
movupd 0x60(%rsi),%xmm4
movupd 0x70(%rsi),%xmm1
movsd  0x60(%rdx),%xmm9
unpcklpd %xmm9,%xmm9
movapd %xmm4,%xmm8
mulpd  %xmm9,%xmm8
addpd  %xmm6,%xmm8
movq   %xmm3,%xmm3
mulpd  %xmm1,%xmm9
addpd  %xmm3,%xmm9
shufpd $0x1,%xmm1,%xmm4
movsd  0x68(%rdx),%xmm3
movapd %xmm3,%xmm10
unpcklpd %xmm3,%xmm10
mulpd  %xmm4,%xmm10
addpd  %xmm2,%xmm10
movsd  0x70(%rdx),%xmm11
unpcklpd %xmm11,%xmm11
movq   %xmm0,%xmm0
mulpd  %xmm1,%xmm11
addpd  %xmm0,%xmm11
movhpd 0x78(%rdx),%xmm3
unpckhpd %xmm1,%xmm1
mulpd  %xmm1,%xmm3
xorpd  %xmm12,%xmm12
addpd  %xmm3,%xmm12
sub    $0xffffffffffffff80,%rsi
sub    $0xffffffffffffff80,%rdx
mov    $0x4,%eax
cmp    $0x8,%edi
jge    1228 <kernel_dlauum_nt_4x4_lib4+0x128>
cmp    %edi,%eax
jl     1455 <kernel_dlauum_nt_4x4_lib4+0x355>
test   %ecx,%ecx
jne    1547 <kernel_dlauum_nt_4x4_lib4+0x447>
jmp    15c4 <kernel_dlauum_nt_4x4_lib4+0x4c4>
lea    -0x3(%rdi),%r10d
mov    $0x4,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movupd (%rsi),%xmm5
movupd 0x10(%rsi),%xmm0
movupd 0x20(%rsi),%xmm14
movupd 0x30(%rsi),%xmm13
movsd  (%rdx),%xmm2
movsd  0x8(%rdx),%xmm6
movsd  0x10(%rdx),%xmm3
movsd  0x20(%rdx),%xmm7
unpcklpd %xmm2,%xmm2
movapd %xmm5,%xmm4
mulpd  %xmm2,%xmm4
addpd  %xmm8,%xmm4
mulpd  %xmm0,%xmm2
addpd  %xmm9,%xmm2
shufpd $0x1,%xmm0,%xmm5
movapd %xmm6,%xmm1
unpcklpd %xmm6,%xmm1
mulpd  %xmm5,%xmm1
addpd  %xmm10,%xmm1
unpcklpd %xmm3,%xmm3
mulpd  %xmm0,%xmm3
addpd  %xmm11,%xmm3
unpckhpd %xmm0,%xmm0
movhpd 0x18(%rdx),%xmm6
mulpd  %xmm0,%xmm6
addpd  %xmm12,%xmm6
unpcklpd %xmm7,%xmm7
movapd %xmm14,%xmm0
mulpd  %xmm7,%xmm0
addpd  %xmm4,%xmm0
mulpd  %xmm13,%xmm7
addpd  %xmm2,%xmm7
shufpd $0x1,%xmm13,%xmm14
movsd  0x28(%rdx),%xmm2
movapd %xmm2,%xmm5
unpcklpd %xmm2,%xmm5
mulpd  %xmm14,%xmm5
addpd  %xmm1,%xmm5
movsd  0x30(%rdx),%xmm4
unpcklpd %xmm4,%xmm4
mulpd  %xmm13,%xmm4
addpd  %xmm3,%xmm4
movhpd 0x38(%rdx),%xmm2
unpckhpd %xmm13,%xmm13
mulpd  %xmm13,%xmm2
addpd  %xmm6,%xmm2
movupd 0x40(%rsi),%xmm1
movupd 0x50(%rsi),%xmm3
movsd  0x40(%rdx),%xmm6
movapd %xmm6,%xmm14
unpcklpd %xmm6,%xmm14
mulpd  %xmm1,%xmm14
addpd  %xmm0,%xmm14
unpcklpd %xmm1,%xmm6
mulpd  %xmm3,%xmm6
addpd  %xmm7,%xmm6
shufpd $0x1,%xmm3,%xmm1
movsd  0x48(%rdx),%xmm7
movapd %xmm7,%xmm0
unpcklpd %xmm7,%xmm0
mulpd  %xmm1,%xmm0
addpd  %xmm5,%xmm0
movsd  0x50(%rdx),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm3,%xmm1
addpd  %xmm4,%xmm1
unpckhpd %xmm3,%xmm3
movhpd 0x58(%rdx),%xmm7
mulpd  %xmm3,%xmm7
addpd  %xmm2,%xmm7
movupd 0x60(%rsi),%xmm5
movupd 0x70(%rsi),%xmm12
movsd  0x60(%rdx),%xmm2
unpcklpd %xmm2,%xmm2
movapd %xmm5,%xmm13
mulpd  %xmm2,%xmm13
movapd %xmm13,%xmm8
addpd  %xmm14,%xmm8
mulpd  %xmm12,%xmm2
movapd %xmm2,%xmm9
addpd  %xmm6,%xmm9
shufpd $0x1,%xmm12,%xmm5
movsd  0x68(%rdx),%xmm4
movapd %xmm4,%xmm3
unpcklpd %xmm4,%xmm3
mulpd  %xmm5,%xmm3
movapd %xmm3,%xmm10
addpd  %xmm0,%xmm10
movsd  0x70(%rdx),%xmm5
unpcklpd %xmm5,%xmm5
mulpd  %xmm12,%xmm5
movapd %xmm5,%xmm11
addpd  %xmm1,%xmm11
unpckhpd %xmm12,%xmm12
movhpd 0x78(%rdx),%xmm4
mulpd  %xmm12,%xmm4
movapd %xmm4,%xmm12
addpd  %xmm7,%xmm12
add    $0x4,%eax
sub    $0xffffffffffffff80,%rsi
sub    $0xffffffffffffff80,%rdx
cmp    %r10d,%eax
jl     1240 <kernel_dlauum_nt_4x4_lib4+0x140>
addpd  %xmm7,%xmm4
addpd  %xmm1,%xmm5
addpd  %xmm0,%xmm3
addpd  %xmm6,%xmm2
addpd  %xmm14,%xmm13
mov    %edi,%eax
and    $0xfffffffc,%eax
movapd %xmm13,%xmm8
movapd %xmm2,%xmm9
movapd %xmm3,%xmm10
movapd %xmm5,%xmm11
movapd %xmm4,%xmm12
cmp    %edi,%eax
jge    121b <kernel_dlauum_nt_4x4_lib4+0x11b>
sub    %eax,%edi
xor    %eax,%eax
nopl   0x0(%rax)
movapd %xmm12,%xmm7
movapd %xmm11,%xmm13
movapd %xmm10,%xmm15
movapd %xmm9,%xmm14
movapd %xmm8,%xmm2
movupd (%rsi,%rax,1),%xmm4
movupd 0x10(%rsi,%rax,1),%xmm3
movsd  (%rdx,%rax,1),%xmm5
movsd  0x8(%rdx,%rax,1),%xmm1
movsd  0x10(%rdx,%rax,1),%xmm6
unpcklpd %xmm5,%xmm5
movapd %xmm4,%xmm0
mulpd  %xmm5,%xmm0
movapd %xmm0,%xmm8
movapd %xmm2,-0x18(%rsp)
addpd  %xmm2,%xmm8
mulpd  %xmm3,%xmm5
movapd %xmm5,%xmm9
addpd  %xmm14,%xmm9
shufpd $0x1,%xmm3,%xmm4
movapd %xmm1,%xmm2
unpcklpd %xmm1,%xmm2
mulpd  %xmm4,%xmm2
movapd %xmm2,%xmm10
addpd  %xmm15,%xmm10
unpcklpd %xmm6,%xmm6
mulpd  %xmm3,%xmm6
movapd %xmm6,%xmm11
addpd  %xmm13,%xmm11
unpckhpd %xmm3,%xmm3
movhpd 0x18(%rdx,%rax,1),%xmm1
mulpd  %xmm3,%xmm1
movapd %xmm1,%xmm12
addpd  %xmm7,%xmm12
add    $0x20,%rax
add    $0xffffffff,%edi
jne    1460 <kernel_dlauum_nt_4x4_lib4+0x360>
addpd  %xmm7,%xmm1
addpd  %xmm13,%xmm6
addpd  %xmm15,%xmm2
addpd  %xmm14,%xmm5
addpd  -0x18(%rsp),%xmm0
movapd %xmm0,%xmm8
movapd %xmm5,%xmm9
movapd %xmm2,%xmm10
movapd %xmm6,%xmm11
movapd %xmm1,%xmm12
test   %ecx,%ecx
je     15c4 <kernel_dlauum_nt_4x4_lib4+0x4c4>
movupd (%r8),%xmm5
movupd 0x10(%r8),%xmm3
movupd 0x28(%r8),%xmm2
movsd  0x38(%r8),%xmm0
movupd 0x50(%r8),%xmm1
movsd  0x78(%r8),%xmm4
cmp    $0x1,%ecx
jne    158e <kernel_dlauum_nt_4x4_lib4+0x48e>
addpd  %xmm5,%xmm8
addpd  %xmm3,%xmm9
addpd  %xmm2,%xmm10
addpd  %xmm1,%xmm11
unpcklpd %xmm4,%xmm0
addpd  %xmm0,%xmm12
jmp    15c4 <kernel_dlauum_nt_4x4_lib4+0x4c4>
subpd  %xmm8,%xmm5
subpd  %xmm9,%xmm3
subpd  %xmm10,%xmm2
subpd  %xmm11,%xmm1
unpcklpd %xmm4,%xmm0
subpd  %xmm12,%xmm0
movapd %xmm5,%xmm8
movapd %xmm3,%xmm9
movapd %xmm2,%xmm10
movapd %xmm1,%xmm11
movapd %xmm0,%xmm12
movupd %xmm8,(%r9)
movupd %xmm9,0x10(%r9)
movupd %xmm10,0x28(%r9)
movlpd %xmm12,0x38(%r9)
movupd %xmm11,0x50(%r9)
movhpd %xmm12,0x78(%r9)
ret

LLVM IR (-O0):
define void @kernel_dlauum_nt_4x4_lib4(i32 %0, double* %1, double* %2, i32 %3, double* %4, double* %5) {
%7 = alloca i32
%8 = alloca double*
%9 = alloca double*
%10 = alloca i32
%11 = alloca double*
%12 = alloca double*
%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 i32 %3, i32* %10
store double* %4, double** %11
store double* %5, double** %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
%187 = load double*, double** %9
%188 = getelementptr inbounds double, double* %187, i64 16
store double* %188, double** %9
br label %189
189: ; preds = %455, %6
%190 = load i32, i32* %16
%191 = load i32, i32* %7
%192 = sub nsw i32 %191, 3
%193 = icmp slt i32 %190, %192
br i1 %193, label %194, label %458
194: ; preds = %189
%195 = load double*, double** %8
%196 = getelementptr inbounds double, double* %195, i64 0
%197 = load double, double* %196
store double %197, double* %17
%198 = load double*, double** %8
%199 = getelementptr inbounds double, double* %198, i64 1
%200 = load double, double* %199
store double %200, double* %18
%201 = load double*, double** %8
%202 = getelementptr inbounds double, double* %201, i64 2
%203 = load double, double* %202
store double %203, double* %19
%204 = load double*, double** %8
%205 = getelementptr inbounds double, double* %204, i64 3
%206 = load double, double* %205
store double %206, double* %20
%207 = load double*, double** %9
%208 = getelementptr inbounds double, double* %207, i64 0
%209 = load double, double* %208
store double %209, double* %21
%210 = load double*, double** %9
%211 = getelementptr inbounds double, double* %210, i64 1
%212 = load double, double* %211
store double %212, double* %22
%213 = load double*, double** %9
%214 = getelementptr inbounds double, double* %213, i64 2
%215 = load double, double* %214
store double %215, double* %23
%216 = load double*, double** %9
%217 = getelementptr inbounds double, double* %216, i64 3
%218 = load double, double* %217
store double %218, double* %24
%219 = load double, double* %17
%220 = load double, double* %21
%221 = load double, double* %25
%222 = call double @llvm.fmuladd.f64(double %219, double %220, double %221)
store double %222, double* %25
%223 = load double, double* %18
%224 = load double, double* %21
%225 = load double, double* %26
%226 = call double @llvm.fmuladd.f64(double %223, double %224, double %225)
store double %226, double* %26
%227 = load double, double* %19
%228 = load double, double* %21
%229 = load double, double* %28
%230 = call double @llvm.fmuladd.f64(double %227, double %228, double %229)
store double %230, double* %28
%231 = load double, double* %20
%232 = load double, double* %21
%233 = load double, double* %31
%234 = call double @llvm.fmuladd.f64(double %231, double %232, double %233)
store double %234, double* %31
%235 = load double, double* %18
%236 = load double, double* %22
%237 = load double, double* %27
%238 = call double @llvm.fmuladd.f64(double %235, double %236, double %237)
store double %238, double* %27
%239 = load double, double* %19
%240 = load double, double* %22
%241 = load double, double* %29
%242 = call double @llvm.fmuladd.f64(double %239, double %240, double %241)
store double %242, double* %29
%243 = load double, double* %20
%244 = load double, double* %22
%245 = load double, double* %32
%246 = call double @llvm.fmuladd.f64(double %243, double %244, double %245)
store double %246, double* %32
%247 = load double, double* %19
%248 = load double, double* %23
%249 = load double, double* %30
%250 = call double @llvm.fmuladd.f64(double %247, double %248, double %249)
store double %250, double* %30
%251 = load double, double* %20
%252 = load double, double* %23
%253 = load double, double* %33
%254 = call double @llvm.fmuladd.f64(double %251, double %252, double %253)
store double %254, double* %33
%255 = load double, double* %20
%256 = load double, double* %24
%257 = load double, double* %34
%258 = call double @llvm.fmuladd.f64(double %255, double %256, double %257)
store double %258, double* %34
%259 = load double*, double** %8
%260 = getelementptr inbounds double, double* %259, i64 4
%261 = load double, double* %260
store double %261, double* %17
%262 = load double*, double** %8
%263 = getelementptr inbounds double, double* %262, i64 5
%264 = load double, double* %263
store double %264, double* %18
%265 = load double*, double** %8
%266 = getelementptr inbounds double, double* %265, i64 6
%267 = load double, double* %266
store double %267, double* %19
%268 = load double*, double** %8
%269 = getelementptr inbounds double, double* %268, i64 7
%270 = load double, double* %269
store double %270, double* %20
%271 = load double*, double** %9
%272 = getelementptr inbounds double, double* %271, i64 4
%273 = load double, double* %272
store double %273, double* %21
%274 = load double*, double** %9
%275 = getelementptr inbounds double, double* %274, i64 5
%276 = load double, double* %275
store double %276, double* %22
%277 = load double*, double** %9
%278 = getelementptr inbounds double, double* %277, i64 6
%279 = load double, double* %278
store double %279, double* %23
%280 = load double*, double** %9
%281 = getelementptr inbounds double, double* %280, i64 7
%282 = load double, double* %281
store double %282, double* %24
%283 = load double, double* %17
%284 = load double, double* %21
%285 = load double, double* %25
%286 = call double @llvm.fmuladd.f64(double %283, double %284, double %285)
store double %286, double* %25
%287 = load double, double* %18
%288 = load double, double* %21
%289 = load double, double* %26
%290 = call double @llvm.fmuladd.f64(double %287, double %288, double %289)
store double %290, double* %26
%291 = load double, double* %19
%292 = load double, double* %21
%293 = load double, double* %28
%294 = call double @llvm.fmuladd.f64(double %291, double %292, double %293)
store double %294, double* %28
%295 = load double, double* %20
%296 = load double, double* %21
%297 = load double, double* %31
%298 = call double @llvm.fmuladd.f64(double %295, double %296, double %297)
store double %298, double* %31
%299 = load double, double* %18
%300 = load double, double* %22
%301 = load double, double* %27
%302 = call double @llvm.fmuladd.f64(double %299, double %300, double %301)
store double %302, double* %27
%303 = load double, double* %19
%304 = load double, double* %22
%305 = load double, double* %29
%306 = call double @llvm.fmuladd.f64(double %303, double %304, double %305)
store double %306, double* %29
%307 = load double, double* %20
%308 = load double, double* %22
%309 = load double, double* %32
%310 = call double @llvm.fmuladd.f64(double %307, double %308, double %309)
store double %310, double* %32
%311 = load double, double* %19
%312 = load double, double* %23
%313 = load double, double* %30
%314 = call double @llvm.fmuladd.f64(double %311, double %312, double %313)
store double %314, double* %30
%315 = load double, double* %20
%316 = load double, double* %23
%317 = load double, double* %33
%318 = call double @llvm.fmuladd.f64(double %315, double %316, double %317)
store double %318, double* %33
%319 = load double, double* %20
%320 = load double, double* %24
%321 = load double, double* %34
%322 = call double @llvm.fmuladd.f64(double %319, double %320, double %321)
store double %322, double* %34
%323 = load double*, double** %8
%324 = getelementptr inbounds double, double* %323, i64 8
%325 = load double, double* %324
store double %325, double* %17
%326 = load double*, double** %8
%327 = getelementptr inbounds double, double* %326, i64 9
%328 = load double, double* %327
store double %328, double* %18
%329 = load double*, double** %8
%330 = getelementptr inbounds double, double* %329, i64 10
%331 = load double, double* %330
store double %331, double* %19
%332 = load double*, double** %8
%333 = getelementptr inbounds double, double* %332, i64 11
%334 = load double, double* %333
store double %334, double* %20
%335 = load double*, double** %9
%336 = getelementptr inbounds double, double* %335, i64 8
%337 = load double, double* %336
store double %337, double* %21
%338 = load double*, double** %9
%339 = getelementptr inbounds double, double* %338, i64 9
%340 = load double, double* %339
store double %340, double* %22
%341 = load double*, double** %9
%342 = getelementptr inbounds double, double* %341, i64 10
%343 = load double, double* %342
store double %343, double* %23
%344 = load double*, double** %9
%345 = getelementptr inbounds double, double* %344, i64 11
%346 = load double, double* %345
store double %346, double* %24
%347 = load double, double* %17
%348 = load double, double* %21
%349 = load double, double* %25
%350 = call double @llvm.fmuladd.f64(double %347, double %348, double %349)
store double %350, double* %25
%351 = load double, double* %18
%352 = load double, double* %21
%353 = load double, double* %26
%354 = call double @llvm.fmuladd.f64(double %351, double %352, double %353)
store double %354, double* %26
%355 = load double, double* %19
%356 = load double, double* %21
%357 = load double, double* %28
%358 = call double @llvm.fmuladd.f64(double %355, double %356, double %357)
store double %358, double* %28
%359 = load double, double* %20
%360 = load double, double* %17
%361 = load double, double* %31
%362 = call double @llvm.fmuladd.f64(double %359, double %360, double %361)
store double %362, double* %31
%363 = load double, double* %18
%364 = load double, double* %22
%365 = load double, double* %27
%366 = call double @llvm.fmuladd.f64(double %363, double %364, double %365)
store double %366, double* %27
%367 = load double, double* %19
%368 = load double, double* %22
%369 = load double, double* %29
%370 = call double @llvm.fmuladd.f64(double %367, double %368, double %369)
store double %370, double* %29
%371 = load double, double* %20
%372 = load double, double* %22
%373 = load double, double* %32
%374 = call double @llvm.fmuladd.f64(double %371, double %372, double %373)
store double %374, double* %32
%375 = load double, double* %19
%376 = load double, double* %23
%377 = load double, double* %30
%378 = call double @llvm.fmuladd.f64(double %375, double %376, double %377)
store double %378, double* %30
%379 = load double, double* %20
%380 = load double, double* %23
%381 = load double, double* %33
%382 = call double @llvm.fmuladd.f64(double %379, double %380, double %381)
store double %382, double* %33
%383 = load double, double* %20
%384 = load double, double* %24
%385 = load double, double* %34
%386 = call double @llvm.fmuladd.f64(double %383, double %384, double %385)
store double %386, double* %34
%387 = load double*, double** %8
%388 = getelementptr inbounds double, double* %387, i64 12
%389 = load double, double* %388
store double %389, double* %17
%390 = load double*, double** %8
%391 = getelementptr inbounds double, double* %390, i64 13
%392 = load double, double* %391
store double %392, double* %18
%393 = load double*, double** %8
%394 = getelementptr inbounds double, double* %393, i64 14
%395 = load double, double* %394
store double %395, double* %19
%396 = load double*, double** %8
%397 = getelementptr inbounds double, double* %396, i64 15
%398 = load double, double* %397
store double %398, double* %20
%399 = load double*, double** %9
%400 = getelementptr inbounds double, double* %399, i64 12
%401 = load double, double* %400
store double %401, double* %21
%402 = load double*, double** %9
%403 = getelementptr inbounds double, double* %402, i64 13
%404 = load double, double* %403
store double %404, double* %22
%405 = load double*, double** %9
%406 = getelementptr inbounds double, double* %405, i64 14
%407 = load double, double* %406
store double %407, double* %23
%408 = load double*, double** %9
%409 = getelementptr inbounds double, double* %408, i64 15
%410 = load double, double* %409
store double %410, double* %24
%411 = load double, double* %17
%412 = load double, double* %21
%413 = load double, double* %25
%414 = call double @llvm.fmuladd.f64(double %411, double %412, double %413)
store double %414, double* %25
%415 = load double, double* %18
%416 = load double, double* %21
%417 = load double, double* %26
%418 = call double @llvm.fmuladd.f64(double %415, double %416, double %417)
store double %418, double* %26
%419 = load double, double* %19
%420 = load double, double* %21
%421 = load double, double* %28
%422 = call double @llvm.fmuladd.f64(double %419, double %420, double %421)
store double %422, double* %28
%423 = load double, double* %20
%424 = load double, double* %21
%425 = load double, double* %31
%426 = call double @llvm.fmuladd.f64(double %423, double %424, double %425)
store double %426, double* %31
%427 = load double, double* %18
%428 = load double, double* %22
%429 = load double, double* %27
%430 = call double @llvm.fmuladd.f64(double %427, double %428, double %429)
store double %430, double* %27
%431 = load double, double* %19
%432 = load double, double* %22
%433 = load double, double* %29
%434 = call double @llvm.fmuladd.f64(double %431, double %432, double %433)
store double %434, double* %29
%435 = load double, double* %20
%436 = load double, double* %22
%437 = load double, double* %32
%438 = call double @llvm.fmuladd.f64(double %435, double %436, double %437)
store double %438, double* %32
%439 = load double, double* %19
%440 = load double, double* %23
%441 = load double, double* %30
%442 = call double @llvm.fmuladd.f64(double %439, double %440, double %441)
store double %442, double* %30
%443 = load double, double* %20
%444 = load double, double* %23
%445 = load double, double* %33
%446 = call double @llvm.fmuladd.f64(double %443, double %444, double %445)
store double %446, double* %33
%447 = load double, double* %20
%448 = load double, double* %24
%449 = load double, double* %34
%450 = call double @llvm.fmuladd.f64(double %447, double %448, double %449)
store double %450, double* %34
%451 = load double*, double** %8
%452 = getelementptr inbounds double, double* %451, i64 16
store double* %452, double** %8
%453 = load double*, double** %9
%454 = getelementptr inbounds double, double* %453, i64 16
store double* %454, double** %9
br label %455
455: ; preds = %194
%456 = load i32, i32* %16
%457 = add nsw i32 %456, 4
store i32 %457, i32* %16
br label %189
458: ; preds = %189
br label %459
459: ; preds = %532, %458
%460 = load i32, i32* %16
%461 = load i32, i32* %7
%462 = icmp slt i32 %460, %461
br i1 %462, label %463, label %535
463: ; preds = %459
%464 = load double*, double** %8
%465 = getelementptr inbounds double, double* %464, i64 0
%466 = load double, double* %465
store double %466, double* %17
%467 = load double*, double** %8
%468 = getelementptr inbounds double, double* %467, i64 1
%469 = load double, double* %468
store double %469, double* %18
%470 = load double*, double** %8
%471 = getelementptr inbounds double, double* %470, i64 2
%472 = load double, double* %471
store double %472, double* %19
%473 = load double*, double** %8
%474 = getelementptr inbounds double, double* %473, i64 3
%475 = load double, double* %474
store double %475, double* %20
%476 = load double*, double** %9
%477 = getelementptr inbounds double, double* %476, i64 0
%478 = load double, double* %477
store double %478, double* %21
%479 = load double*, double** %9
%480 = getelementptr inbounds double, double* %479, i64 1
%481 = load double, double* %480
store double %481, double* %22
%482 = load double*, double** %9
%483 = getelementptr inbounds double, double* %482, i64 2
%484 = load double, double* %483
store double %484, double* %23
%485 = load double*, double** %9
%486 = getelementptr inbounds double, double* %485, i64 3
%487 = load double, double* %486
store double %487, double* %24
%488 = load double, double* %17
%489 = load double, double* %21
%490 = load double, double* %25
%491 = call double @llvm.fmuladd.f64(double %488, double %489, double %490)
store double %491, double* %25
%492 = load double, double* %18
%493 = load double, double* %21
%494 = load double, double* %26
%495 = call double @llvm.fmuladd.f64(double %492, double %493, double %494)
store double %495, double* %26
%496 = load double, double* %19
%497 = load double, double* %21
%498 = load double, double* %28
%499 = call double @llvm.fmuladd.f64(double %496, double %497, double %498)
store double %499, double* %28
%500 = load double, double* %20
%501 = load double, double* %21
%502 = load double, double* %31
%503 = call double @llvm.fmuladd.f64(double %500, double %501, double %502)
store double %503, double* %31
%504 = load double, double* %18
%505 = load double, double* %22
%506 = load double, double* %27
%507 = call double @llvm.fmuladd.f64(double %504, double %505, double %506)
store double %507, double* %27
%508 = load double, double* %19
%509 = load double, double* %22
%510 = load double, double* %29
%511 = call double @llvm.fmuladd.f64(double %508, double %509, double %510)
store double %511, double* %29
%512 = load double, double* %20
%513 = load double, double* %22
%514 = load double, double* %32
%515 = call double @llvm.fmuladd.f64(double %512, double %513, double %514)
store double %515, double* %32
%516 = load double, double* %19
%517 = load double, double* %23
%518 = load double, double* %30
%519 = call double @llvm.fmuladd.f64(double %516, double %517, double %518)
store double %519, double* %30
%520 = load double, double* %20
%521 = load double, double* %23
%522 = load double, double* %33
%523 = call double @llvm.fmuladd.f64(double %520, double %521, double %522)
store double %523, double* %33
%524 = load double, double* %20
%525 = load double, double* %24
%526 = load double, double* %34
%527 = call double @llvm.fmuladd.f64(double %524, double %525, double %526)
store double %527, double* %34
%528 = load double*, double** %8
%529 = getelementptr inbounds double, double* %528, i64 4
store double* %529, double** %8
%530 = load double*, double** %9
%531 = getelementptr inbounds double, double* %530, i64 4
store double* %531, double** %9
br label %532
532: ; preds = %463
%533 = load i32, i32* %16
%534 = add nsw i32 %533, 1
store i32 %534, i32* %16
br label %459
535: ; preds = %459
%536 = load i32, i32* %10
%537 = icmp eq i32 %536, 0
br i1 %537, label %538, label %569
538: ; preds = %535
%539 = load double, double* %25
%540 = load double*, double** %12
%541 = getelementptr inbounds double, double* %540, i64 0
store double %539, double* %541
%542 = load double, double* %26
%543 = load double*, double** %12
%544 = getelementptr inbounds double, double* %543, i64 1
store double %542, double* %544
%545 = load double, double* %28
%546 = load double*, double** %12
%547 = getelementptr inbounds double, double* %546, i64 2
store double %545, double* %547
%548 = load double, double* %31
%549 = load double*, double** %12
%550 = getelementptr inbounds double, double* %549, i64 3
store double %548, double* %550
%551 = load double, double* %27
%552 = load double*, double** %12
%553 = getelementptr inbounds double, double* %552, i64 5
store double %551, double* %553
%554 = load double, double* %29
%555 = load double*, double** %12
%556 = getelementptr inbounds double, double* %555, i64 6
store double %554, double* %556
%557 = load double, double* %32
%558 = load double*, double** %12
%559 = getelementptr inbounds double, double* %558, i64 7
store double %557, double* %559
%560 = load double, double* %30
%561 = load double*, double** %12
%562 = getelementptr inbounds double, double* %561, i64 10
store double %560, double* %562
%563 = load double, double* %33
%564 = load double*, double** %12
%565 = getelementptr inbounds double, double* %564, i64 11
store double %563, double* %565
%566 = load double, double* %34
%567 = load double*, double** %12
%568 = getelementptr inbounds double, double* %567, i64 15
store double %566, double* %568
br label %695
569: ; preds = %535
%570 = load double*, double** %11
%571 = getelementptr inbounds double, double* %570, i64 0
%572 = load double, double* %571
store double %572, double* %35
%573 = load double*, double** %11
%574 = getelementptr inbounds double, double* %573, i64 1
%575 = load double, double* %574
store double %575, double* %36
%576 = load double*, double** %11
%577 = getelementptr inbounds double, double* %576, i64 2
%578 = load double, double* %577
store double %578, double* %38
%579 = load double*, double** %11
%580 = getelementptr inbounds double, double* %579, i64 3
%581 = load double, double* %580
store double %581, double* %41
%582 = load double*, double** %11
%583 = getelementptr inbounds double, double* %582, i64 5
%584 = load double, double* %583
store double %584, double* %37
%585 = load double*, double** %11
%586 = getelementptr inbounds double, double* %585, i64 6
%587 = load double, double* %586
store double %587, double* %39
%588 = load double*, double** %11
%589 = getelementptr inbounds double, double* %588, i64 7
%590 = load double, double* %589
store double %590, double* %42
%591 = load double*, double** %11
%592 = getelementptr inbounds double, double* %591, i64 10
%593 = load double, double* %592
store double %593, double* %40
%594 = load double*, double** %11
%595 = getelementptr inbounds double, double* %594, i64 11
%596 = load double, double* %595
store double %596, double* %43
%597 = load double*, double** %11
%598 = getelementptr inbounds double, double* %597, i64 15
%599 = load double, double* %598
store double %599, double* %44
%600 = load i32, i32* %10
%601 = icmp eq i32 %600, 1
br i1 %601, label %602, label %633
602: ; preds = %569
%603 = load double, double* %25
%604 = load double, double* %35
%605 = fadd double %604, %603
store double %605, double* %35
%606 = load double, double* %26
%607 = load double, double* %36
%608 = fadd double %607, %606
store double %608, double* %36
%609 = load double, double* %28
%610 = load double, double* %38
%611 = fadd double %610, %609
store double %611, double* %38
%612 = load double, double* %31
%613 = load double, double* %41
%614 = fadd double %613, %612
store double %614, double* %41
%615 = load double, double* %27
%616 = load double, double* %37
%617 = fadd double %616, %615
store double %617, double* %37
%618 = load double, double* %29
%619 = load double, double* %39
%620 = fadd double %619, %618
store double %620, double* %39
%621 = load double, double* %32
%622 = load double, double* %42
%623 = fadd double %622, %621
store double %623, double* %42
%624 = load double, double* %30
%625 = load double, double* %40
%626 = fadd double %625, %624
store double %626, double* %40
%627 = load double, double* %33
%628 = load double, double* %43
%629 = fadd double %628, %627
store double %629, double* %43
%630 = load double, double* %34
%631 = load double, double* %44
%632 = fadd double %631, %630
store double %632, double* %44
br label %664
633: ; preds = %569
%634 = load double, double* %25
%635 = load double, double* %35
%636 = fsub double %635, %634
store double %636, double* %35
%637 = load double, double* %26
%638 = load double, double* %36
%639 = fsub double %638, %637
store double %639, double* %36
%640 = load double, double* %28
%641 = load double, double* %38
%642 = fsub double %641, %640
store double %642, double* %38
%643 = load double, double* %31
%644 = load double, double* %41
%645 = fsub double %644, %643
store double %645, double* %41
%646 = load double, double* %27
%647 = load double, double* %37
%648 = fsub double %647, %646
store double %648, double* %37
%649 = load double, double* %29
%650 = load double, double* %39
%651 = fsub double %650, %649
store double %651, double* %39
%652 = load double, double* %32
%653 = load double, double* %42
%654 = fsub double %653, %652
store double %654, double* %42
%655 = load double, double* %30
%656 = load double, double* %40
%657 = fsub double %656, %655
store double %657, double* %40
%658 = load double, double* %33
%659 = load double, double* %43
%660 = fsub double %659, %658
store double %660, double* %43
%661 = load double, double* %34
%662 = load double, double* %44
%663 = fsub double %662, %661
store double %663, double* %44
br label %664
664: ; preds = %633, %602
%665 = load double, double* %35
%666 = load double*, double** %12
%667 = getelementptr inbounds double, double* %666, i64 0
store double %665, double* %667
%668 = load double, double* %36
%669 = load double*, double** %12
%670 = getelementptr inbounds double, double* %669, i64 1
store double %668, double* %670
%671 = load double, double* %38
%672 = load double*, double** %12
%673 = getelementptr inbounds double, double* %672, i64 2
store double %671, double* %673
%674 = load double, double* %41
%675 = load double*, double** %12
%676 = getelementptr inbounds double, double* %675, i64 3
store double %674, double* %676
%677 = load double, double* %37
%678 = load double*, double** %12
%679 = getelementptr inbounds double, double* %678, i64 5
store double %677, double* %679
%680 = load double, double* %39
%681 = load double*, double** %12
%682 = getelementptr inbounds double, double* %681, i64 6
store double %680, double* %682
%683 = load double, double* %42
%684 = load double*, double** %12
%685 = getelementptr inbounds double, double* %684, i64 7
store double %683, double* %685
%686 = load double, double* %40
%687 = load double*, double** %12
%688 = getelementptr inbounds double, double* %687, i64 10
store double %686, double* %688
%689 = load double, double* %43
%690 = load double*, double** %12
%691 = getelementptr inbounds double, double* %690, i64 11
store double %689, double* %691
%692 = load double, double* %44
%693 = load double*, double** %12
%694 = getelementptr inbounds double, double* %693, i64 15
store double %692, double* %694
br label %695
695: ; preds = %664, %538
ret void
}

LLVM IR (-O2):
define void @kernel_dlauum_nt_4x4_lib4(i32 %0, double* nocapture %1, double* nocapture %2, i32 %3, double* nocapture %4, double* nocapture writeonly %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 = getelementptr inbounds double, double* %2, i64 16
%79 = icmp sgt i32 %0, 7
br i1 %79, label %112, label %102
80: ; preds = %112
%81 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %146, <2 x double> %147, <2 x double> %122)
%82 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %174, <2 x double> %175, <2 x double> %81)
%83 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %203, <2 x double> %204, <2 x double> %82)
%84 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %231, <2 x double> %232, <2 x double> %83)
%85 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %127, <2 x double> %144, <2 x double> %121)
%86 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %154, <2 x double> %172, <2 x double> %85)
%87 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %182, <2 x double> %201, <2 x double> %86)
%88 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %211, <2 x double> %229, <2 x double> %87)
%89 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %139, <2 x double> %141, <2 x double> %120)
%90 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %167, <2 x double> %169, <2 x double> %89)
%91 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %196, <2 x double> %198, <2 x double> %90)
%92 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %224, <2 x double> %226, <2 x double> %91)
%93 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %127, <2 x double> %136, <2 x double> %119)
%94 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %154, <2 x double> %164, <2 x double> %93)
%95 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %182, <2 x double> %194, <2 x double> %94)
%96 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %211, <2 x double> %221, <2 x double> %95)
%97 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %124, <2 x double> %136, <2 x double> %118)
%98 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %151, <2 x double> %164, <2 x double> %97)
%99 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %179, <2 x double> %192, <2 x double> %98)
%100 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %208, <2 x double> %221, <2 x double> %99)
%101 = and i32 %0, -4
br label %102
102: ; preds = %80, %6
%103 = phi i32 [ 4, %6 ], [ %101, %80 ]
%104 = phi double* [ %77, %6 ], [ %235, %80 ]
%105 = phi double* [ %78, %6 ], [ %236, %80 ]
%106 = phi <2 x double> [ %62, %6 ], [ %100, %80 ]
%107 = phi <2 x double> [ %64, %6 ], [ %96, %80 ]
%108 = phi <2 x double> [ %68, %6 ], [ %92, %80 ]
%109 = phi <2 x double> [ %72, %6 ], [ %88, %80 ]
%110 = phi <2 x double> [ %75, %6 ], [ %84, %80 ]
%111 = icmp slt i32 %103, %0
br i1 %111, label %238, label %283
112: ; preds = %6, %112
%113 = phi double* [ %236, %112 ], [ %78, %6 ]
%114 = phi double* [ %235, %112 ], [ %77, %6 ]
%115 = phi i32 [ %234, %112 ], [ 4, %6 ]
%116 = phi double* [ %114, %112 ], [ %1, %6 ]
%117 = phi double* [ %113, %112 ], [ %2, %6 ]
%118 = phi <2 x double> [ %222, %112 ], [ %62, %6 ]
%119 = phi <2 x double> [ %223, %112 ], [ %64, %6 ]
%120 = phi <2 x double> [ %227, %112 ], [ %68, %6 ]
%121 = phi <2 x double> [ %230, %112 ], [ %72, %6 ]
%122 = phi <2 x double> [ %233, %112 ], [ %75, %6 ]
%123 = bitcast double* %114 to <2 x double>*
%124 = load <2 x double>, <2 x double>* %123
%125 = getelementptr inbounds double, double* %116, i64 18
%126 = bitcast double* %125 to <2 x double>*
%127 = load <2 x double>, <2 x double>* %126
%128 = load double, double* %113
%129 = getelementptr inbounds double, double* %117, i64 17
%130 = load double, double* %129
%131 = getelementptr inbounds double, double* %117, i64 18
%132 = load double, double* %131
%133 = getelementptr inbounds double, double* %117, i64 19
%134 = load double, double* %133
%135 = insertelement <2 x double> poison, double %128, i64 0
%136 = shufflevector <2 x double> %135, <2 x double> poison, <2 x i32> zeroinitializer
%137 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %124, <2 x double> %136, <2 x double> %118)
%138 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %127, <2 x double> %136, <2 x double> %119)
%139 = shufflevector <2 x double> %124, <2 x double> %127, <2 x i32> <i32 1, i32 2>
%140 = insertelement <2 x double> poison, double %130, i64 0
%141 = shufflevector <2 x double> %140, <2 x double> poison, <2 x i32> zeroinitializer
%142 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %139, <2 x double> %141, <2 x double> %120)
%143 = insertelement <2 x double> poison, double %132, i64 0
%144 = shufflevector <2 x double> %143, <2 x double> poison, <2 x i32> zeroinitializer
%145 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %127, <2 x double> %144, <2 x double> %121)
%146 = shufflevector <2 x double> %127, <2 x double> undef, <2 x i32> <i32 1, i32 1>
%147 = insertelement <2 x double> %140, double %134, i64 1
%148 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %146, <2 x double> %147, <2 x double> %122)
%149 = getelementptr inbounds double, double* %116, i64 20
%150 = bitcast double* %149 to <2 x double>*
%151 = load <2 x double>, <2 x double>* %150
%152 = getelementptr inbounds double, double* %116, i64 22
%153 = bitcast double* %152 to <2 x double>*
%154 = load <2 x double>, <2 x double>* %153
%155 = getelementptr inbounds double, double* %117, i64 20
%156 = load double, double* %155
%157 = getelementptr inbounds double, double* %117, i64 21
%158 = load double, double* %157
%159 = getelementptr inbounds double, double* %117, i64 22
%160 = load double, double* %159
%161 = getelementptr inbounds double, double* %117, i64 23
%162 = load double, double* %161
%163 = insertelement <2 x double> poison, double %156, i64 0
%164 = shufflevector <2 x double> %163, <2 x double> poison, <2 x i32> zeroinitializer
%165 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %151, <2 x double> %164, <2 x double> %137)
%166 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %154, <2 x double> %164, <2 x double> %138)
%167 = shufflevector <2 x double> %151, <2 x double> %154, <2 x i32> <i32 1, i32 2>
%168 = insertelement <2 x double> poison, double %158, i64 0
%169 = shufflevector <2 x double> %168, <2 x double> poison, <2 x i32> zeroinitializer
%170 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %167, <2 x double> %169, <2 x double> %142)
%171 = insertelement <2 x double> poison, double %160, i64 0
%172 = shufflevector <2 x double> %171, <2 x double> poison, <2 x i32> zeroinitializer
%173 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %154, <2 x double> %172, <2 x double> %145)
%174 = shufflevector <2 x double> %154, <2 x double> undef, <2 x i32> <i32 1, i32 1>
%175 = insertelement <2 x double> %168, double %162, i64 1
%176 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %174, <2 x double> %175, <2 x double> %148)
%177 = getelementptr inbounds double, double* %116, i64 24
%178 = bitcast double* %177 to <2 x double>*
%179 = load <2 x double>, <2 x double>* %178
%180 = getelementptr inbounds double, double* %116, i64 26
%181 = bitcast double* %180 to <2 x double>*
%182 = load <2 x double>, <2 x double>* %181
%183 = getelementptr inbounds double, double* %117, i64 24
%184 = load double, double* %183
%185 = getelementptr inbounds double, double* %117, i64 25
%186 = load double, double* %185
%187 = getelementptr inbounds double, double* %117, i64 26
%188 = load double, double* %187
%189 = getelementptr inbounds double, double* %117, i64 27
%190 = load double, double* %189
%191 = insertelement <2 x double> poison, double %184, i64 0
%192 = shufflevector <2 x double> %191, <2 x double> poison, <2 x i32> zeroinitializer
%193 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %179, <2 x double> %192, <2 x double> %165)
%194 = shufflevector <2 x double> %191, <2 x double> %179, <2 x i32> <i32 0, i32 2>
%195 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %182, <2 x double> %194, <2 x double> %166)
%196 = shufflevector <2 x double> %179, <2 x double> %182, <2 x i32> <i32 1, i32 2>
%197 = insertelement <2 x double> poison, double %186, i64 0
%198 = shufflevector <2 x double> %197, <2 x double> poison, <2 x i32> zeroinitializer
%199 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %196, <2 x double> %198, <2 x double> %170)
%200 = insertelement <2 x double> poison, double %188, i64 0
%201 = shufflevector <2 x double> %200, <2 x double> poison, <2 x i32> zeroinitializer
%202 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %182, <2 x double> %201, <2 x double> %173)
%203 = shufflevector <2 x double> %182, <2 x double> undef, <2 x i32> <i32 1, i32 1>
%204 = insertelement <2 x double> %197, double %190, i64 1
%205 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %203, <2 x double> %204, <2 x double> %176)
%206 = getelementptr inbounds double, double* %116, i64 28
%207 = bitcast double* %206 to <2 x double>*
%208 = load <2 x double>, <2 x double>* %207
%209 = getelementptr inbounds double, double* %116, i64 30
%210 = bitcast double* %209 to <2 x double>*
%211 = load <2 x double>, <2 x double>* %210
%212 = getelementptr inbounds double, double* %117, i64 28
%213 = load double, double* %212
%214 = getelementptr inbounds double, double* %117, i64 29
%215 = load double, double* %214
%216 = getelementptr inbounds double, double* %117, i64 30
%217 = load double, double* %216
%218 = getelementptr inbounds double, double* %117, i64 31
%219 = load double, double* %218
%220 = insertelement <2 x double> poison, double %213, i64 0
%221 = shufflevector <2 x double> %220, <2 x double> poison, <2 x i32> zeroinitializer
%222 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %208, <2 x double> %221, <2 x double> %193)
%223 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %211, <2 x double> %221, <2 x double> %195)
%224 = shufflevector <2 x double> %208, <2 x double> %211, <2 x i32> <i32 1, i32 2>
%225 = insertelement <2 x double> poison, double %215, i64 0
%226 = shufflevector <2 x double> %225, <2 x double> poison, <2 x i32> zeroinitializer
%227 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %224, <2 x double> %226, <2 x double> %199)
%228 = insertelement <2 x double> poison, double %217, 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> %211, <2 x double> %229, <2 x double> %202)
%231 = shufflevector <2 x double> %211, <2 x double> undef, <2 x i32> <i32 1, i32 1>
%232 = insertelement <2 x double> %225, double %219, i64 1
%233 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %231, <2 x double> %232, <2 x double> %205)
%234 = add nuw nsw i32 %115, 4
%235 = getelementptr inbounds double, double* %114, i64 16
%236 = getelementptr inbounds double, double* %113, i64 16
%237 = icmp slt i32 %234, %76
br i1 %237, label %112, label %80
238: ; preds = %102, %238
%239 = phi i32 [ %275, %238 ], [ %103, %102 ]
%240 = phi double* [ %273, %238 ], [ %104, %102 ]
%241 = phi double* [ %274, %238 ], [ %105, %102 ]
%242 = phi <2 x double> [ %261, %238 ], [ %106, %102 ]
%243 = phi <2 x double> [ %262, %238 ], [ %107, %102 ]
%244 = phi <2 x double> [ %266, %238 ], [ %108, %102 ]
%245 = phi <2 x double> [ %269, %238 ], [ %109, %102 ]
%246 = phi <2 x double> [ %272, %238 ], [ %110, %102 ]
%247 = bitcast double* %240 to <2 x double>*
%248 = load <2 x double>, <2 x double>* %247
%249 = getelementptr inbounds double, double* %240, i64 2
%250 = bitcast double* %249 to <2 x double>*
%251 = load <2 x double>, <2 x double>* %250
%252 = load double, double* %241
%253 = getelementptr inbounds double, double* %241, i64 1
%254 = load double, double* %253
%255 = getelementptr inbounds double, double* %241, i64 2
%256 = load double, double* %255
%257 = getelementptr inbounds double, double* %241, i64 3
%258 = load double, double* %257
%259 = insertelement <2 x double> poison, double %252, i64 0
%260 = shufflevector <2 x double> %259, <2 x double> poison, <2 x i32> zeroinitializer
%261 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %248, <2 x double> %260, <2 x double> %242)
%262 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %251, <2 x double> %260, <2 x double> %243)
%263 = shufflevector <2 x double> %248, <2 x double> %251, <2 x i32> <i32 1, i32 2>
%264 = insertelement <2 x double> poison, double %254, i64 0
%265 = shufflevector <2 x double> %264, <2 x double> poison, <2 x i32> zeroinitializer
%266 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %263, <2 x double> %265, <2 x double> %244)
%267 = insertelement <2 x double> poison, double %256, i64 0
%268 = shufflevector <2 x double> %267, <2 x double> poison, <2 x i32> zeroinitializer
%269 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %251, <2 x double> %268, <2 x double> %245)
%270 = shufflevector <2 x double> %251, <2 x double> undef, <2 x i32> <i32 1, i32 1>
%271 = insertelement <2 x double> %264, double %258, i64 1
%272 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %270, <2 x double> %271, <2 x double> %246)
%273 = getelementptr inbounds double, double* %240, i64 4
%274 = getelementptr inbounds double, double* %241, i64 4
%275 = add nuw nsw i32 %239, 1
%276 = icmp eq i32 %275, %0
br i1 %276, label %277, label %238
277: ; preds = %238
%278 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %270, <2 x double> %271, <2 x double> %246)
%279 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %251, <2 x double> %268, <2 x double> %245)
%280 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %263, <2 x double> %265, <2 x double> %244)
%281 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %251, <2 x double> %260, <2 x double> %243)
%282 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %248, <2 x double> %260, <2 x double> %242)
br label %283
283: ; preds = %277, %102
%284 = phi <2 x double> [ %106, %102 ], [ %282, %277 ]
%285 = phi <2 x double> [ %107, %102 ], [ %281, %277 ]
%286 = phi <2 x double> [ %108, %102 ], [ %280, %277 ]
%287 = phi <2 x double> [ %109, %102 ], [ %279, %277 ]
%288 = phi <2 x double> [ %110, %102 ], [ %278, %277 ]
%289 = icmp eq i32 %3, 0
br i1 %289, label %323, label %290
290: ; preds = %283
%291 = bitcast double* %4 to <2 x double>*
%292 = load <2 x double>, <2 x double>* %291
%293 = getelementptr inbounds double, double* %4, i64 2
%294 = bitcast double* %293 to <2 x double>*
%295 = load <2 x double>, <2 x double>* %294
%296 = getelementptr inbounds double, double* %4, i64 5
%297 = bitcast double* %296 to <2 x double>*
%298 = load <2 x double>, <2 x double>* %297
%299 = getelementptr inbounds double, double* %4, i64 7
%300 = load double, double* %299
%301 = getelementptr inbounds double, double* %4, i64 10
%302 = bitcast double* %301 to <2 x double>*
%303 = load <2 x double>, <2 x double>* %302
%304 = getelementptr inbounds double, double* %4, i64 15
%305 = load double, double* %304
%306 = icmp eq i32 %3, 1
br i1 %306, label %307, label %315
307: ; preds = %290
%308 = fadd <2 x double> %284, %292
%309 = fadd <2 x double> %285, %295
%310 = fadd <2 x double> %286, %298
%311 = fadd <2 x double> %287, %303
%312 = insertelement <2 x double> poison, double %300, i64 0
%313 = insertelement <2 x double> %312, double %305, i64 1
%314 = fadd <2 x double> %288, %313
br label %323
315: ; preds = %290
%316 = fsub <2 x double> %292, %284
%317 = fsub <2 x double> %295, %285
%318 = fsub <2 x double> %298, %286
%319 = fsub <2 x double> %303, %287
%320 = insertelement <2 x double> poison, double %300, i64 0
%321 = insertelement <2 x double> %320, double %305, i64 1
%322 = fsub <2 x double> %321, %288
br label %323
323: ; preds = %307, %315, %283
%324 = phi <2 x double> [ %284, %283 ], [ %308, %307 ], [ %316, %315 ]
%325 = phi <2 x double> [ %285, %283 ], [ %309, %307 ], [ %317, %315 ]
%326 = phi <2 x double> [ %286, %283 ], [ %310, %307 ], [ %318, %315 ]
%327 = phi <2 x double> [ %287, %283 ], [ %311, %307 ], [ %319, %315 ]
%328 = phi <2 x double> [ %288, %283 ], [ %314, %307 ], [ %322, %315 ]
%329 = bitcast double* %5 to <2 x double>*
store <2 x double> %324, <2 x double>* %329
%330 = getelementptr inbounds double, double* %5, i64 2
%331 = bitcast double* %330 to <2 x double>*
store <2 x double> %325, <2 x double>* %331
%332 = getelementptr inbounds double, double* %5, i64 5
%333 = bitcast double* %332 to <2 x double>*
store <2 x double> %326, <2 x double>* %333
%334 = getelementptr inbounds double, double* %5, i64 7
%335 = extractelement <2 x double> %328, i64 0
store double %335, double* %334
%336 = getelementptr inbounds double, double* %5, i64 10
%337 = bitcast double* %336 to <2 x double>*
store <2 x double> %327, <2 x double>* %337
%338 = getelementptr inbounds double, double* %5, i64 15
%339 = extractelement <2 x double> %328, i64 1
store double %339, double* %338
ret void
}