void kernel_dpotrf_dtrsm_4_unpack_lib(int kmax, double *A, int lda) {
  double a_00, a_10, a_11, a_20, a_21, a_22, a_30, a_31, a_32, a_33, b_00, b_01,
      b_02, b_03;
  int k;
  if (kmax > 4) {
    a_00 = A[0 + lda * 0];
    a_10 = A[1 + lda * 0];
    a_20 = A[2 + lda * 0];
    a_30 = A[3 + lda * 0];
    a_00 = sqrt(a_00);
    A[0 + lda * 0] = a_00;
    a_00 = 1.0 / a_00;
    a_10 = a_10 * a_00;
    a_20 = a_20 * a_00;
    a_30 = a_30 * a_00;
    A[1 + lda * 0] = a_10;
    A[2 + lda * 0] = a_20;
    A[3 + lda * 0] = a_30;
    a_11 = A[1 + lda * 1];
    a_21 = A[2 + lda * 1];
    a_31 = A[3 + lda * 1];
    a_11 = a_11 - a_10 * a_10;
    a_21 = a_21 - a_20 * a_10;
    a_31 = a_31 - a_30 * a_10;
    a_11 = sqrt(a_11);
    A[1 + lda * 1] = a_11;
    a_11 = 1.0 / a_11;
    a_21 = a_21 * a_11;
    a_31 = a_31 * a_11;
    A[2 + lda * 1] = a_21;
    A[3 + lda * 1] = a_31;
    a_22 = A[2 + lda * 2];
    a_32 = A[3 + lda * 2];
    a_22 = a_22 - a_20 * a_20;
    a_32 = a_32 - a_30 * a_20;
    a_22 = a_22 - a_21 * a_21;
    a_32 = a_32 - a_31 * a_21;
    a_22 = sqrt(a_22);
    A[2 + lda * 2] = a_22;
    a_22 = 1.0 / a_22;
    a_32 = a_32 * a_22;
    A[3 + lda * 2] = a_32;
    a_33 = A[3 + lda * 3];
    a_33 = a_33 - a_30 * a_30;
    a_33 = a_33 - a_31 * a_31;
    a_33 = a_33 - a_32 * a_32;
    a_33 = sqrt(a_33);
    A[3 + lda * 3] = a_33;
    a_33 = 1.0 / a_33;
    A += 4;
    k = 4;
  } else {
    a_00 = A[0 + lda * 0];
    a_10 = A[1 + lda * 0];
    a_20 = A[2 + lda * 0];
    a_30 = A[3 + lda * 0];
    a_00 = sqrt(a_00);
    A[0 + lda * 0] = a_00;
    a_00 = 1.0 / a_00;
    a_10 = a_10 * a_00;
    a_20 = a_20 * a_00;
    a_30 = a_30 * a_00;
    A[1 + lda * 0] = a_10;
    A[2 + lda * 0] = a_20;
    A[3 + lda * 0] = a_30;
    if (kmax > 1) {
      a_11 = A[1 + lda * 1];
      a_21 = A[2 + lda * 1];
      a_31 = A[3 + lda * 1];
      a_11 = a_11 - a_10 * a_10;
      a_21 = a_21 - a_20 * a_10;
      a_31 = a_31 - a_30 * a_10;
      a_11 = sqrt(a_11);
      A[1 + lda * 1] = a_11;
      a_11 = 1.0 / a_11;
      a_21 = a_21 * a_11;
      a_31 = a_31 * a_11;
      A[2 + lda * 1] = a_21;
      A[3 + lda * 1] = a_31;
      if (kmax > 2) {
        a_22 = A[2 + lda * 2];
        a_32 = A[3 + lda * 2];
        a_22 = a_22 - a_20 * a_20;
        a_32 = a_32 - a_30 * a_20;
        a_22 = a_22 - a_21 * a_21;
        a_32 = a_32 - a_31 * a_21;
        a_22 = sqrt(a_22);
        A[2 + lda * 2] = a_22;
        a_22 = 1.0 / a_22;
        a_32 = a_32 * a_22;
        A[3 + lda * 2] = a_32;
        if (kmax > 3) {
          a_33 = A[3 + lda * 3];
          a_33 = a_33 - a_30 * a_30;
          a_33 = a_33 - a_31 * a_31;
          a_33 = a_33 - a_32 * a_32;
          a_33 = sqrt(a_33);
          A[3 + lda * 3] = a_33;
        }
      }
    }
    return;
  }
  for (; k < kmax; k++) {
    b_00 = A[0 + lda * 0];
    b_00 *= a_00;
    A[0 + lda * 0] = b_00;
    b_01 = A[0 + lda * 1];
    b_01 = b_01 - b_00 * a_10;
    b_01 *= a_11;
    A[0 + lda * 1] = b_01;
    b_02 = A[0 + lda * 2];
    b_02 = b_02 - b_00 * a_20;
    b_02 = b_02 - b_01 * a_21;
    b_02 *= a_22;
    A[0 + lda * 2] = b_02;
    b_03 = A[0 + lda * 3];
    b_03 = b_03 - b_00 * a_30;
    b_03 = b_03 - b_01 * a_31;
    b_03 = b_03 - b_02 * a_32;
    b_03 *= a_33;
    A[0 + lda * 3] = b_03;
    A += 1;
  }
}


x86 assembly (clang, -O0):
<kernel_dpotrf_dtrsm_4_unpack_lib>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
cmpl   $0x4,-0x4(%rbp)
jle    161a <kernel_dpotrf_dtrsm_4_unpack_lib+0x50a>
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x20(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xe42(%rip),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x28(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x50(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x28(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x58(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xcab(%rip),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xb1e(%rip),%xmm0
divsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x60(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
imul   $0x3,-0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x3,-0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0xa0b(%rip),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x10(%rbp)
movl   $0x4,-0x8c(%rbp)
jmp    1b05 <kernel_dpotrf_dtrsm_4_unpack_lib+0x9f5>
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x20(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0x957(%rip),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x28(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x50(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x28(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
cmpl   $0x1,-0x4(%rbp)
jle    1b00 <kernel_dpotrf_dtrsm_4_unpack_lib+0x9f0>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x58(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0x7b6(%rip),%xmm0
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
cmpl   $0x2,-0x4(%rbp)
jle    1afb <kernel_dpotrf_dtrsm_4_unpack_lib+0x9eb>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0x61f(%rip),%xmm0
divsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x60(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
cmpl   $0x3,-0x4(%rbp)
jle    1af6 <kernel_dpotrf_dtrsm_4_unpack_lib+0x9e6>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
call   1030 <sqrt@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x3,-0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1afb <kernel_dpotrf_dtrsm_4_unpack_lib+0x9eb>
jmp    1b00 <kernel_dpotrf_dtrsm_4_unpack_lib+0x9f0>
jmp    1d8d <kernel_dpotrf_dtrsm_4_unpack_lib+0xc7d>
jmp    1b0a <kernel_dpotrf_dtrsm_4_unpack_lib+0x9fa>
mov    -0x8c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1d8d <kernel_dpotrf_dtrsm_4_unpack_lib+0xc7d>
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x20(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x14(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x30(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x0,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
imul   $0x3,-0x14(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x70(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x14(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    1b0a <kernel_dpotrf_dtrsm_4_unpack_lib+0x9fa>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dpotrf_dtrsm_4_unpack_lib>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xe8,%rsp
mov    %edx,%r13d
mov    %rsi,%rbp
mov    %edi,%r14d
movsd  (%rsi),%xmm0
movupd 0x8(%rsi),%xmm3
movsd  0x18(%rsi),%xmm8
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1149 <kernel_dpotrf_dtrsm_4_unpack_lib+0x39>
sqrtsd %xmm0,%xmm0
jmp    1168 <kernel_dpotrf_dtrsm_4_unpack_lib+0x58>
movapd %xmm8,0x10(%rsp)
movapd %xmm3,0x60(%rsp)
call   1030 <sqrt@plt>
movapd 0x60(%rsp),%xmm3
movapd 0x10(%rsp),%xmm8
movsd  %xmm0,0x0(%rbp)
movsd  0xe8b(%rip),%xmm4
movapd %xmm4,0x80(%rsp)
divsd  %xmm0,%xmm4
movapd %xmm4,%xmm6
unpcklpd %xmm4,%xmm6
mulpd  %xmm6,%xmm3
mulsd  %xmm4,%xmm8
movupd %xmm3,0x8(%rbp)
movsd  %xmm8,0x18(%rbp)
cmp    $0x5,%r14d
jl     125f <kernel_dpotrf_dtrsm_4_unpack_lib+0x14f>
mov    %r13,0x50(%rsp)
movslq %r13d,%r12
lea    0x1(%r12),%r15
lea    0x2(%r12),%r13
movsd  0x8(%rbp,%r12,8),%xmm0
movsd  0x10(%rbp,%r12,8),%xmm2
lea    0x3(%r12),%rbx
movsd  0x18(%rbp,%r12,8),%xmm12
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
subsd  %xmm1,%xmm0
movapd %xmm3,%xmm9
unpckhpd %xmm3,%xmm9
movapd 0xe1e(%rip),%xmm7
movapd %xmm9,%xmm5
xorpd  %xmm7,%xmm5
movapd %xmm9,%xmm1
mulsd  %xmm3,%xmm1
subsd  %xmm1,%xmm2
xorpd  %xmm8,%xmm7
movapd %xmm8,%xmm1
mulsd  %xmm3,%xmm1
subsd  %xmm1,%xmm12
xorpd  %xmm10,%xmm10
ucomisd %xmm10,%xmm0
movapd %xmm8,0x10(%rsp)
movapd %xmm3,0x60(%rsp)
movapd %xmm4,0xc0(%rsp)
movapd %xmm9,0xb0(%rsp)
movapd %xmm6,0xd0(%rsp)
movapd %xmm7,0x70(%rsp)
jb     12ca <kernel_dpotrf_dtrsm_4_unpack_lib+0x1ba>
sqrtsd %xmm0,%xmm0
jmp    130a <kernel_dpotrf_dtrsm_4_unpack_lib+0x1fa>
cmp    $0x2,%r14d
jl     18fe <kernel_dpotrf_dtrsm_4_unpack_lib+0x7ee>
movslq %r13d,%rbx
lea    0x1(%rbx),%r12
lea    0x2(%rbx),%r15
movsd  0x8(%rbp,%rbx,8),%xmm0
movsd  0x10(%rbp,%rbx,8),%xmm5
movsd  0x18(%rbp,%rbx,8),%xmm2
add    $0x3,%rbx
movapd %xmm3,%xmm1
mulsd  %xmm3,%xmm1
subsd  %xmm1,%xmm0
movapd %xmm3,%xmm4
unpckhpd %xmm3,%xmm4
movapd %xmm4,%xmm1
mulsd  %xmm3,%xmm1
subsd  %xmm1,%xmm5
mulsd  %xmm8,%xmm3
subsd  %xmm3,%xmm2
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1791 <kernel_dpotrf_dtrsm_4_unpack_lib+0x681>
sqrtsd %xmm0,%xmm0
jmp    17c8 <kernel_dpotrf_dtrsm_4_unpack_lib+0x6b8>
movapd %xmm2,0x40(%rsp)
movapd %xmm12,0x30(%rsp)
movapd %xmm5,0x20(%rsp)
call   1030 <sqrt@plt>
xorpd  %xmm10,%xmm10
movapd 0x20(%rsp),%xmm5
movapd 0x70(%rsp),%xmm7
movapd 0xb0(%rsp),%xmm9
movapd 0x30(%rsp),%xmm12
movapd 0x40(%rsp),%xmm2
movsd  %xmm0,0x0(%rbp,%r15,8)
movsd  0xce7(%rip),%xmm1
divsd  %xmm0,%xmm1
mulsd  %xmm1,%xmm2
mulsd  %xmm1,%xmm12
movsd  %xmm2,0x0(%rbp,%r13,8)
movsd  %xmm12,0x0(%rbp,%rbx,8)
mov    0x50(%rsp),%rax
add    %eax,%eax
movslq %eax,%r13
lea    0x2(%r13),%r15
mulsd  %xmm9,%xmm5
addsd  0x10(%rbp,%r13,8),%xmm5
lea    0x3(%r13),%rbx
movapd %xmm7,%xmm6
mulsd  %xmm9,%xmm6
addsd  0x18(%rbp,%r13,8),%xmm6
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
subsd  %xmm0,%xmm5
movapd 0xc9a(%rip),%xmm3
xorpd  %xmm12,%xmm3
movapd %xmm12,%xmm0
mulsd  %xmm2,%xmm0
subsd  %xmm0,%xmm6
ucomisd %xmm10,%xmm5
movapd %xmm2,0x40(%rsp)
movapd %xmm12,0x30(%rsp)
movapd %xmm1,0xa0(%rsp)
jb     13ae <kernel_dpotrf_dtrsm_4_unpack_lib+0x29e>
xorps  %xmm0,%xmm0
sqrtsd %xmm5,%xmm0
jmp    13e2 <kernel_dpotrf_dtrsm_4_unpack_lib+0x2d2>
movapd %xmm5,%xmm0
movapd %xmm6,0x20(%rsp)
movapd %xmm3,0x90(%rsp)
call   1030 <sqrt@plt>
movapd 0x90(%rsp),%xmm3
movapd 0x70(%rsp),%xmm7
movapd 0x20(%rsp),%xmm6
movapd 0x30(%rsp),%xmm12
movapd 0x10(%rsp),%xmm5
movsd  %xmm0,0x0(%rbp,%r15,8)
movsd  0xc09(%rip),%xmm4
divsd  %xmm0,%xmm4
mulsd  %xmm4,%xmm6
movsd  %xmm6,0x0(%rbp,%rbx,8)
mov    0x50(%rsp),%rax
lea    (%rax,%rax,2),%eax
movslq %eax,%rbx
mulsd  %xmm5,%xmm7
addsd  0x18(%rbp,%rbx,8),%xmm7
lea    0x3(%rbx),%r15
mulsd  %xmm12,%xmm3
addsd  %xmm7,%xmm3
movapd %xmm6,%xmm0
mulsd  %xmm6,%xmm0
subsd  %xmm0,%xmm3
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm3
jb     1446 <kernel_dpotrf_dtrsm_4_unpack_lib+0x336>
xorps  %xmm0,%xmm0
sqrtsd %xmm3,%xmm0
jmp    1474 <kernel_dpotrf_dtrsm_4_unpack_lib+0x364>
movapd %xmm3,%xmm0
movapd %xmm6,0x20(%rsp)
movapd %xmm4,0x50(%rsp)
call   1030 <sqrt@plt>
movapd 0x50(%rsp),%xmm4
movapd 0x20(%rsp),%xmm6
movapd 0x30(%rsp),%xmm12
movapd 0x10(%rsp),%xmm5
movapd 0x60(%rsp),%xmm14
movapd 0xc0(%rsp),%xmm15
movapd 0x40(%rsp),%xmm10
movapd 0xb0(%rsp),%xmm13
movapd 0xa0(%rsp),%xmm9
movsd  %xmm0,0x0(%rbp,%r15,8)
movapd 0x80(%rsp),%xmm1
divsd  %xmm0,%xmm1
movapd %xmm1,0x80(%rsp)
lea    0x20(%rbp),%rcx
mov    %r14d,%r11d
mov    $0x4,%eax
add    $0xfffffffb,%r11d
je     16de <kernel_dpotrf_dtrsm_4_unpack_lib+0x5ce>
lea    0x28(,%r11,8),%rdi
add    %rbp,%rdi
lea    0x20(%rbp,%r12,8),%rax
lea    (%r12,%r11,1),%rdx
lea    0x28(%rbp,%rdx,8),%rdx
lea    0x20(%rbp,%r13,8),%r10
lea    0x0(%r13,%r11,1),%rsi
lea    0x28(%rbp,%rsi,8),%r8
lea    0x20(,%rbx,8),%r9
add    %rbp,%r9
lea    (%rbx,%r11,1),%rsi
lea    0x28(%rbp,%rsi,8),%rbp
cmp    %rdx,%rcx
setb   0x50(%rsp)
cmp    %rdi,%rax
setb   0x20(%rsp)
cmp    %r8,%rcx
setb   %r15b
cmp    %rdi,%r10
setb   0x70(%rsp)
cmp    %rbp,%rcx
setb   %sil
cmp    %rdi,%r9
setb   0x90(%rsp)
cmp    %r8,%rax
setb   %dil
cmp    %rdx,%r10
setb   0xf(%rsp)
cmp    %rbp,%rax
setb   %al
cmp    %rdx,%r9
setb   0xe(%rsp)
cmp    %rbp,%r10
setb   %r10b
cmp    %r8,%r9
setb   %r8b
mov    0x20(%rsp),%dl
test   %dl,0x50(%rsp)
jne    16e3 <kernel_dpotrf_dtrsm_4_unpack_lib+0x5d3>
and    0x70(%rsp),%r15b
jne    16e3 <kernel_dpotrf_dtrsm_4_unpack_lib+0x5d3>
and    0x90(%rsp),%sil
jne    16e3 <kernel_dpotrf_dtrsm_4_unpack_lib+0x5d3>
and    0xf(%rsp),%dil
jne    16e3 <kernel_dpotrf_dtrsm_4_unpack_lib+0x5d3>
and    0xe(%rsp),%al
jne    16e3 <kernel_dpotrf_dtrsm_4_unpack_lib+0x5d3>
and    %r8b,%r10b
jne    16e3 <kernel_dpotrf_dtrsm_4_unpack_lib+0x5d3>
add    $0x1,%r11
mov    %r11,%rbp
and    $0xfffffffffffffffe,%rbp
lea    0x4(%rbp),%eax
lea    (%rcx,%rbp,8),%rdx
movapd %xmm14,%xmm8
unpcklpd %xmm14,%xmm8
unpcklpd %xmm9,%xmm9
unpcklpd %xmm10,%xmm10
movapd %xmm4,0x50(%rsp)
movapd %xmm4,%xmm11
unpcklpd %xmm4,%xmm11
movapd %xmm5,%xmm4
unpcklpd %xmm5,%xmm4
movapd %xmm12,%xmm5
unpcklpd %xmm12,%xmm5
movapd %xmm6,0x20(%rsp)
unpcklpd %xmm6,%xmm6
movapd 0x80(%rsp),%xmm7
unpcklpd %xmm7,%xmm7
mov    %rbp,%rdi
movapd 0xd0(%rsp),%xmm12
nopl   0x0(%rax)
movupd (%rcx),%xmm3
mulpd  %xmm12,%xmm3
movupd %xmm3,(%rcx)
movupd (%rcx,%r12,8),%xmm1
movapd %xmm3,%xmm0
mulpd  %xmm8,%xmm0
subpd  %xmm0,%xmm1
mulpd  %xmm9,%xmm1
movupd %xmm1,(%rcx,%r12,8)
movupd (%rcx,%r13,8),%xmm0
movapd %xmm3,%xmm2
mulpd  %xmm13,%xmm2
subpd  %xmm2,%xmm0
movapd %xmm1,%xmm2
mulpd  %xmm10,%xmm2
subpd  %xmm2,%xmm0
mulpd  %xmm11,%xmm0
movupd %xmm0,(%rcx,%r13,8)
movupd (%rcx,%rbx,8),%xmm2
mulpd  %xmm4,%xmm3
subpd  %xmm3,%xmm2
mulpd  %xmm5,%xmm1
subpd  %xmm1,%xmm2
mulpd  %xmm6,%xmm0
subpd  %xmm0,%xmm2
mulpd  %xmm7,%xmm2
movupd %xmm2,(%rcx,%rbx,8)
add    $0x10,%rcx
add    $0xfffffffffffffffe,%rdi
jne    1620 <kernel_dpotrf_dtrsm_4_unpack_lib+0x510>
cmp    %rbp,%r11
movapd 0x40(%rsp),%xmm10
movapd 0x30(%rsp),%xmm12
movapd 0xa0(%rsp),%xmm9
movapd 0x20(%rsp),%xmm6
movapd 0x50(%rsp),%xmm4
movapd 0x10(%rsp),%xmm5
jne    16eb <kernel_dpotrf_dtrsm_4_unpack_lib+0x5db>
jmp    18fe <kernel_dpotrf_dtrsm_4_unpack_lib+0x7ee>
mov    %rcx,%rdx
jmp    16eb <kernel_dpotrf_dtrsm_4_unpack_lib+0x5db>
mov    %rcx,%rdx
mov    $0x4,%eax
sub    %eax,%r14d
lea    (%rdx,%r12,8),%rax
lea    (%rdx,%r13,8),%rcx
lea    (%rdx,%rbx,8),%rsi
xor    %edi,%edi
nopl   0x0(%rax)
movsd  (%rdx,%rdi,8),%xmm0
mulsd  %xmm15,%xmm0
movsd  %xmm0,(%rdx,%rdi,8)
movsd  (%rax,%rdi,8),%xmm1
movapd %xmm0,%xmm2
mulsd  %xmm14,%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm9,%xmm1
movsd  %xmm1,(%rax,%rdi,8)
movsd  (%rcx,%rdi,8),%xmm2
movapd %xmm0,%xmm3
mulsd  %xmm13,%xmm3
subsd  %xmm3,%xmm2
movapd %xmm1,%xmm3
mulsd  %xmm10,%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm4,%xmm2
movsd  %xmm2,(%rcx,%rdi,8)
movsd  (%rsi,%rdi,8),%xmm3
mulsd  %xmm5,%xmm0
subsd  %xmm0,%xmm3
mulsd  %xmm12,%xmm1
subsd  %xmm1,%xmm3
mulsd  %xmm6,%xmm2
subsd  %xmm2,%xmm3
mulsd  0x80(%rsp),%xmm3
movsd  %xmm3,(%rsi,%rdi,8)
add    $0x1,%rdi
cmp    %edi,%r14d
jne    1700 <kernel_dpotrf_dtrsm_4_unpack_lib+0x5f0>
jmp    18fe <kernel_dpotrf_dtrsm_4_unpack_lib+0x7ee>
movapd %xmm8,0x10(%rsp)
movapd %xmm2,0x60(%rsp)
movapd %xmm4,0x40(%rsp)
movsd  %xmm5,0x30(%rsp)
call   1030 <sqrt@plt>
movsd  0x30(%rsp),%xmm5
movapd 0x40(%rsp),%xmm4
movapd 0x60(%rsp),%xmm2
movapd 0x10(%rsp),%xmm8
movsd  %xmm0,0x0(%rbp,%r12,8)
movsd  0x829(%rip),%xmm1
divsd  %xmm0,%xmm1
mulsd  %xmm1,%xmm5
mulsd  %xmm1,%xmm2
movsd  %xmm5,0x0(%rbp,%r15,8)
movsd  %xmm2,0x0(%rbp,%rbx,8)
cmp    $0x2,%r14d
je     18fe <kernel_dpotrf_dtrsm_4_unpack_lib+0x7ee>
movapd 0x80e(%rip),%xmm3
movapd %xmm4,%xmm0
xorpd  %xmm3,%xmm0
xorpd  %xmm8,%xmm3
lea    0x0(%r13,%r13,1),%eax
cltq
mulsd  %xmm4,%xmm0
addsd  0x10(%rbp,%rax,8),%xmm0
lea    0x2(%rax),%rbx
mulsd  %xmm3,%xmm4
addsd  0x18(%rbp,%rax,8),%xmm4
lea    0x3(%rax),%r15
movapd %xmm2,%xmm1
mulsd  %xmm5,%xmm1
mulsd  %xmm5,%xmm5
subsd  %xmm5,%xmm0
subsd  %xmm1,%xmm4
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1856 <kernel_dpotrf_dtrsm_4_unpack_lib+0x746>
sqrtsd %xmm0,%xmm0
jmp    188d <kernel_dpotrf_dtrsm_4_unpack_lib+0x77d>
movapd %xmm8,0x10(%rsp)
movapd %xmm2,0x60(%rsp)
movapd %xmm4,0x40(%rsp)
movapd %xmm3,0x30(%rsp)
call   1030 <sqrt@plt>
movapd 0x30(%rsp),%xmm3
movapd 0x40(%rsp),%xmm4
movapd 0x60(%rsp),%xmm2
movapd 0x10(%rsp),%xmm8
movsd  %xmm0,0x0(%rbp,%rbx,8)
movsd  0x765(%rip),%xmm1
divsd  %xmm0,%xmm1
mulsd  %xmm1,%xmm4
movsd  %xmm4,0x0(%rbp,%r15,8)
cmp    $0x4,%r14d
jb     18fe <kernel_dpotrf_dtrsm_4_unpack_lib+0x7ee>
movapd 0x758(%rip),%xmm0
xorpd  %xmm2,%xmm0
lea    0x0(%r13,%r13,2),%eax
movslq %eax,%rbx
mulsd  %xmm8,%xmm3
addsd  0x18(%rbp,%rbx,8),%xmm3
add    $0x3,%rbx
mulsd  %xmm2,%xmm0
addsd  %xmm3,%xmm0
mulsd  %xmm4,%xmm4
subsd  %xmm4,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     18f3 <kernel_dpotrf_dtrsm_4_unpack_lib+0x7e3>
sqrtsd %xmm0,%xmm0
jmp    18f8 <kernel_dpotrf_dtrsm_4_unpack_lib+0x7e8>
call   1030 <sqrt@plt>
movsd  %xmm0,0x0(%rbp,%rbx,8)
add    $0xe8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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