void kernel_dgetrf_nn_2x2_vs_lib4(int km, int kn, int kmax, double *A,
                                  double *B, int sdb, int alg, double *C,
                                  double *D, double *inv_diag_D) {
  const int bs = 4;
  int k;
  double tmp, a_0, a_1, b_0, b_1, d_00 = 0, d_01 = 0, d_10 = 0, d_11 = 0;
  if (kmax <= 0)
    goto add;
  for (k = 0; k < kmax - 3; k += 4) {
    a_0 = A[0 + bs * 0];
    a_1 = A[1 + bs * 0];
    b_0 = B[0 + bs * 0];
    b_1 = B[0 + bs * 1];
    d_00 -= a_0 * b_0;
    d_10 -= a_1 * b_0;
    d_01 -= a_0 * b_1;
    d_11 -= a_1 * b_1;
    a_0 = A[0 + bs * 1];
    a_1 = A[1 + bs * 1];
    b_0 = B[1 + bs * 0];
    b_1 = B[1 + bs * 1];
    d_00 -= a_0 * b_0;
    d_10 -= a_1 * b_0;
    d_01 -= a_0 * b_1;
    d_11 -= a_1 * b_1;
    a_0 = A[0 + bs * 2];
    a_1 = A[1 + bs * 2];
    b_0 = B[2 + bs * 0];
    b_1 = B[2 + bs * 1];
    d_00 -= a_0 * b_0;
    d_10 -= a_1 * b_0;
    d_01 -= a_0 * b_1;
    d_11 -= a_1 * b_1;
    a_0 = A[0 + bs * 3];
    a_1 = A[1 + bs * 3];
    b_0 = B[3 + bs * 0];
    b_1 = B[3 + bs * 1];
    d_00 -= a_0 * b_0;
    d_10 -= a_1 * b_0;
    d_01 -= a_0 * b_1;
    d_11 -= a_1 * b_1;
    A += 16;
    B += 4 * sdb;
  }
  for (; k < kmax; k++) {
    a_0 = A[0 + bs * 0];
    a_1 = A[1 + bs * 0];
    b_0 = B[0 + bs * 0];
    b_1 = B[0 + bs * 1];
    d_00 -= a_0 * b_0;
    d_10 -= a_1 * b_0;
    d_01 -= a_0 * b_1;
    d_11 -= a_1 * b_1;
    A += 4;
    B += 1;
  }
add:
  if (alg != 0) {
    d_00 += C[0 + bs * 0];
    d_10 += C[1 + bs * 0];
    d_01 += C[0 + bs * 1];
    d_11 += C[1 + bs * 1];
  }
  tmp = 1.0 / d_00;
  d_10 *= tmp;
  inv_diag_D[0] = tmp;
  D[0 + bs * 0] = d_00;
  if (km >= 2)
    D[1 + bs * 0] = d_10;
  if (kn < 2)
    return;
  d_11 -= d_10 * d_01;
  tmp = 1.0 / d_11;
  inv_diag_D[1] = tmp;
  D[0 + bs * 1] = d_01;
  if (km >= 2)
    D[1 + bs * 1] = d_11;
  return;
}


x86 assembly (clang, -O0):
<kernel_dgetrf_nn_2x2_vs_lib4>:
push   %rbp
mov    %rsp,%rbp
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0x4,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
cmpl   $0x0,-0xc(%rbp)
jg     115e <kernel_dgetrf_nn_2x2_vs_lib4+0x5e>
jmp    16f6 <kernel_dgetrf_nn_2x2_vs_lib4+0x5f6>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    15b8 <kernel_dgetrf_nn_2x2_vs_lib4+0x4b8>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    1165 <kernel_dgetrf_nn_2x2_vs_lib4+0x65>
jmp    15bd <kernel_dgetrf_nn_2x2_vs_lib4+0x4bd>
mov    -0x2c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    16f1 <kernel_dgetrf_nn_2x2_vs_lib4+0x5f1>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    15bd <kernel_dgetrf_nn_2x2_vs_lib4+0x4bd>
jmp    16f6 <kernel_dgetrf_nn_2x2_vs_lib4+0x5f6>
cmpl   $0x0,0x10(%rbp)
je     174b <kernel_dgetrf_nn_2x2_vs_lib4+0x64b>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0x8ad(%rip),%xmm0
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x60(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
cmpl   $0x2,-0x4(%rbp)
jl     179e <kernel_dgetrf_nn_2x2_vs_lib4+0x69e>
movsd  -0x70(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
cmpl   $0x2,-0x8(%rbp)
jge    17ad <kernel_dgetrf_nn_2x2_vs_lib4+0x6ad>
jmp    182b <kernel_dgetrf_nn_2x2_vs_lib4+0x72b>
movsd  -0x70(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0x818(%rip),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x68(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
cmpl   $0x2,-0x4(%rbp)
jl     1826 <kernel_dgetrf_nn_2x2_vs_lib4+0x726>
movsd  -0x78(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,0x28(%rax)
jmp    182b <kernel_dgetrf_nn_2x2_vs_lib4+0x72b>
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgetrf_nn_2x2_vs_lib4>:
mov    0x8(%rsp),%r10d
test   %edx,%edx
jle    12d1 <kernel_dgetrf_nn_2x2_vs_lib4+0x1d1>
cmp    $0x4,%edx
jb     12de <kernel_dgetrf_nn_2x2_vs_lib4+0x1de>
lea    -0x3(%rdx),%r11d
shl    $0x2,%r9d
movslq %r9d,%r9
shl    $0x3,%r9
xorpd  %xmm1,%xmm1
xor    %eax,%eax
movapd 0xecc(%rip),%xmm8
xorpd  %xmm5,%xmm5
nopl   0x0(%rax,%rax,1)
movapd %xmm5,%xmm10
movapd %xmm1,%xmm9
movupd (%rcx),%xmm14
movupd 0x20(%rcx),%xmm13
movupd 0x40(%rcx),%xmm12
movupd 0x60(%rcx),%xmm11
movapd %xmm14,%xmm3
unpckhpd %xmm14,%xmm3
movapd %xmm14,%xmm0
unpcklpd %xmm14,%xmm0
movsd  (%r8),%xmm7
movsd  0x8(%r8),%xmm6
movsd  0x10(%r8),%xmm4
movsd  0x18(%r8),%xmm2
movhpd 0x20(%r8),%xmm7
mulpd  %xmm7,%xmm0
subpd  %xmm0,%xmm1
mulpd  %xmm7,%xmm3
subpd  %xmm3,%xmm5
movapd %xmm13,%xmm0
unpcklpd %xmm13,%xmm0
movapd %xmm13,%xmm3
unpckhpd %xmm13,%xmm3
movhpd 0x28(%r8),%xmm6
mulpd  %xmm6,%xmm3
subpd  %xmm3,%xmm5
mulpd  %xmm6,%xmm0
subpd  %xmm0,%xmm1
movapd %xmm12,%xmm0
unpckhpd %xmm12,%xmm0
movapd %xmm12,%xmm3
unpcklpd %xmm12,%xmm3
movhpd 0x30(%r8),%xmm4
mulpd  %xmm4,%xmm3
subpd  %xmm3,%xmm1
mulpd  %xmm4,%xmm0
subpd  %xmm0,%xmm5
movapd %xmm11,%xmm0
unpcklpd %xmm11,%xmm0
movapd %xmm11,%xmm3
unpckhpd %xmm11,%xmm3
movhpd 0x38(%r8),%xmm2
mulpd  %xmm2,%xmm3
subpd  %xmm3,%xmm5
mulpd  %xmm2,%xmm0
subpd  %xmm0,%xmm1
sub    $0xffffffffffffff80,%rcx
add    $0x4,%eax
add    %r9,%r8
cmp    %r11d,%eax
jl     1140 <kernel_dgetrf_nn_2x2_vs_lib4+0x40>
xorpd  %xmm8,%xmm14
pshufd $0xee,%xmm14,%xmm5
pshufd $0x44,%xmm14,%xmm3
xorpd  %xmm8,%xmm13
pshufd $0xee,%xmm13,%xmm15
pshufd $0x44,%xmm13,%xmm14
xorpd  %xmm8,%xmm12
pshufd $0xee,%xmm12,%xmm13
pshufd $0x44,%xmm12,%xmm12
xorpd  %xmm8,%xmm11
pshufd $0xee,%xmm11,%xmm1
pshufd $0x44,%xmm11,%xmm0
mulpd  %xmm7,%xmm5
addpd  %xmm10,%xmm5
mulpd  %xmm7,%xmm3
addpd  %xmm9,%xmm3
mulpd  %xmm6,%xmm14
addpd  %xmm3,%xmm14
mulpd  %xmm6,%xmm15
addpd  %xmm5,%xmm15
mulpd  %xmm4,%xmm13
addpd  %xmm15,%xmm13
mulpd  %xmm4,%xmm12
addpd  %xmm14,%xmm12
mulpd  %xmm2,%xmm0
addpd  %xmm12,%xmm0
mulpd  %xmm2,%xmm1
addpd  %xmm13,%xmm1
mov    %edx,%eax
and    $0xfffffffc,%eax
cmp    %edx,%eax
jl     12ec <kernel_dgetrf_nn_2x2_vs_lib4+0x1ec>
jmp    1364 <kernel_dgetrf_nn_2x2_vs_lib4+0x264>
xorpd  %xmm0,%xmm0
xorpd  %xmm1,%xmm1
jmp    1364 <kernel_dgetrf_nn_2x2_vs_lib4+0x264>
xorpd  %xmm0,%xmm0
xor    %eax,%eax
xorpd  %xmm1,%xmm1
cmp    %edx,%eax
jge    1364 <kernel_dgetrf_nn_2x2_vs_lib4+0x264>
sub    %eax,%edx
xor    %eax,%eax
movapd 0xd07(%rip),%xmm8
nopl   0x0(%rax)
movapd %xmm1,%xmm2
movapd %xmm0,%xmm4
movupd (%rcx),%xmm3
movapd %xmm3,%xmm7
unpcklpd %xmm3,%xmm7
movapd %xmm3,%xmm6
movsd  (%r8,%rax,8),%xmm5
movhpd 0x20(%r8,%rax,8),%xmm5
unpckhpd %xmm3,%xmm6
mulpd  %xmm5,%xmm6
subpd  %xmm6,%xmm1
mulpd  %xmm5,%xmm7
subpd  %xmm7,%xmm0
add    $0x20,%rcx
add    $0x1,%rax
cmp    %eax,%edx
jne    1300 <kernel_dgetrf_nn_2x2_vs_lib4+0x200>
xorpd  %xmm8,%xmm3
pshufd $0xee,%xmm3,%xmm1
pshufd $0x44,%xmm3,%xmm0
mulpd  %xmm5,%xmm0
addpd  %xmm4,%xmm0
mulpd  %xmm5,%xmm1
addpd  %xmm2,%xmm1
mov    0x20(%rsp),%rcx
mov    0x18(%rsp),%rax
test   %r10d,%r10d
je     1393 <kernel_dgetrf_nn_2x2_vs_lib4+0x293>
mov    0x10(%rsp),%rdx
movsd  (%rdx),%xmm2
movsd  0x8(%rdx),%xmm3
movhpd 0x20(%rdx),%xmm2
movhpd 0x28(%rdx),%xmm3
addpd  %xmm3,%xmm1
addpd  %xmm2,%xmm0
movsd  0xc75(%rip),%xmm2
movapd %xmm2,%xmm3
divsd  %xmm0,%xmm3
movsd  %xmm3,(%rcx)
mulsd  %xmm1,%xmm3
movlpd %xmm0,(%rax)
cmp    $0x2,%edi
jl     13b9 <kernel_dgetrf_nn_2x2_vs_lib4+0x2b9>
movsd  %xmm3,0x8(%rax)
cmp    $0x2,%esi
jl     13ea <kernel_dgetrf_nn_2x2_vs_lib4+0x2ea>
movapd %xmm0,%xmm4
unpckhpd %xmm0,%xmm4
unpckhpd %xmm1,%xmm1
mulsd  %xmm4,%xmm3
subsd  %xmm3,%xmm1
divsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%rcx)
movhpd %xmm0,0x20(%rax)
cmp    $0x2,%edi
jl     13ea <kernel_dgetrf_nn_2x2_vs_lib4+0x2ea>
movsd  %xmm1,0x28(%rax)
ret

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

LLVM IR (-O2):
define void @kernel_dgetrf_nn_2x2_vs_lib4(i32 %0, i32 %1, i32 %2, double* nocapture %3, double* nocapture %4, i32 %5, i32 %6, double* nocapture %7, double* nocapture writeonly %8, double* nocapture writeonly %9) {
%11 = icmp slt i32 %2, 1
br i1 %11, label %111, label %12
12: ; preds = %10
%13 = add nsw i32 %2, -3
%14 = icmp ugt i32 %2, 3
br i1 %14, label %15, label %24
15: ; preds = %12
%16 = shl nsw i32 %5, 2
%17 = sext i32 %16 to i64
br label %30
18: ; preds = %30
%19 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %41, <4 x double> %44, <4 x double> %34)
%20 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %54, <4 x double> %57, <4 x double> %19)
%21 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %67, <4 x double> %70, <4 x double> %20)
%22 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %80, <4 x double> %83, <4 x double> %21)
%23 = and i32 %2, -4
br label %24
24: ; preds = %18, %12
%25 = phi double* [ %4, %12 ], [ %86, %18 ]
%26 = phi double* [ %3, %12 ], [ %85, %18 ]
%27 = phi i32 [ 0, %12 ], [ %23, %18 ]
%28 = phi <4 x double> [ zeroinitializer, %12 ], [ %22, %18 ]
%29 = icmp slt i32 %27, %2
br i1 %29, label %89, label %111
30: ; preds = %15, %30
%31 = phi i32 [ 0, %15 ], [ %87, %30 ]
%32 = phi double* [ %3, %15 ], [ %85, %30 ]
%33 = phi double* [ %4, %15 ], [ %86, %30 ]
%34 = phi <4 x double> [ zeroinitializer, %15 ], [ %84, %30 ]
%35 = bitcast double* %32 to <2 x double>*
%36 = load <2 x double>, <2 x double>* %35
%37 = load double, double* %33
%38 = getelementptr inbounds double, double* %33, i64 4
%39 = load double, double* %38
%40 = fneg <2 x double> %36
%41 = shufflevector <2 x double> %40, <2 x double> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
%42 = insertelement <4 x double> poison, double %37, i64 0
%43 = insertelement <4 x double> %42, double %39, i64 1
%44 = shufflevector <4 x double> %43, <4 x double> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
%45 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %41, <4 x double> %44, <4 x double> %34)
%46 = getelementptr inbounds double, double* %32, i64 4
%47 = bitcast double* %46 to <2 x double>*
%48 = load <2 x double>, <2 x double>* %47
%49 = getelementptr inbounds double, double* %33, i64 1
%50 = load double, double* %49
%51 = getelementptr inbounds double, double* %33, i64 5
%52 = load double, double* %51
%53 = fneg <2 x double> %48
%54 = shufflevector <2 x double> %53, <2 x double> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
%55 = insertelement <4 x double> poison, double %50, i64 0
%56 = insertelement <4 x double> %55, double %52, i64 1
%57 = shufflevector <4 x double> %56, <4 x double> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
%58 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %54, <4 x double> %57, <4 x double> %45)
%59 = getelementptr inbounds double, double* %32, i64 8
%60 = bitcast double* %59 to <2 x double>*
%61 = load <2 x double>, <2 x double>* %60
%62 = getelementptr inbounds double, double* %33, i64 2
%63 = load double, double* %62
%64 = getelementptr inbounds double, double* %33, i64 6
%65 = load double, double* %64
%66 = fneg <2 x double> %61
%67 = shufflevector <2 x double> %66, <2 x double> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
%68 = insertelement <4 x double> poison, double %63, i64 0
%69 = insertelement <4 x double> %68, double %65, i64 1
%70 = shufflevector <4 x double> %69, <4 x double> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
%71 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %67, <4 x double> %70, <4 x double> %58)
%72 = getelementptr inbounds double, double* %32, i64 12
%73 = bitcast double* %72 to <2 x double>*
%74 = load <2 x double>, <2 x double>* %73
%75 = getelementptr inbounds double, double* %33, i64 3
%76 = load double, double* %75
%77 = getelementptr inbounds double, double* %33, i64 7
%78 = load double, double* %77
%79 = fneg <2 x double> %74
%80 = shufflevector <2 x double> %79, <2 x double> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
%81 = insertelement <4 x double> poison, double %76, i64 0
%82 = insertelement <4 x double> %81, double %78, i64 1
%83 = shufflevector <4 x double> %82, <4 x double> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
%84 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %80, <4 x double> %83, <4 x double> %71)
%85 = getelementptr inbounds double, double* %32, i64 16
%86 = getelementptr inbounds double, double* %33, i64 %17
%87 = add nuw nsw i32 %31, 4
%88 = icmp slt i32 %87, %13
br i1 %88, label %30, label %18
89: ; preds = %24, %89
%90 = phi i32 [ %107, %89 ], [ %27, %24 ]
%91 = phi double* [ %105, %89 ], [ %26, %24 ]
%92 = phi double* [ %106, %89 ], [ %25, %24 ]
%93 = phi <4 x double> [ %104, %89 ], [ %28, %24 ]
%94 = bitcast double* %91 to <2 x double>*
%95 = load <2 x double>, <2 x double>* %94
%96 = load double, double* %92
%97 = getelementptr inbounds double, double* %92, i64 4
%98 = load double, double* %97
%99 = fneg <2 x double> %95
%100 = shufflevector <2 x double> %99, <2 x double> poison, <4 x i32> <i32 0, i32 0, i32 1, i32 1>
%101 = insertelement <4 x double> poison, double %96, i64 0
%102 = insertelement <4 x double> %101, double %98, i64 1
%103 = shufflevector <4 x double> %102, <4 x double> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
%104 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %100, <4 x double> %103, <4 x double> %93)
%105 = getelementptr inbounds double, double* %91, i64 4
%106 = getelementptr inbounds double, double* %92, i64 1
%107 = add nuw nsw i32 %90, 1
%108 = icmp eq i32 %107, %2
br i1 %108, label %109, label %89
109: ; preds = %89
%110 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %100, <4 x double> %103, <4 x double> %93)
br label %111
111: ; preds = %109, %24, %10
%112 = phi <4 x double> [ zeroinitializer, %10 ], [ %28, %24 ], [ %110, %109 ]
%113 = icmp eq i32 %6, 0
br i1 %113, label %127, label %114
114: ; preds = %111
%115 = load double, double* %7
%116 = getelementptr inbounds double, double* %7, i64 1
%117 = load double, double* %116
%118 = getelementptr inbounds double, double* %7, i64 4
%119 = load double, double* %118
%120 = getelementptr inbounds double, double* %7, i64 5
%121 = load double, double* %120
%122 = insertelement <4 x double> poison, double %115, i64 0
%123 = insertelement <4 x double> %122, double %119, i64 1
%124 = insertelement <4 x double> %123, double %117, i64 2
%125 = insertelement <4 x double> %124, double %121, i64 3
%126 = fadd <4 x double> %112, %125
br label %127
127: ; preds = %114, %111
%128 = phi <4 x double> [ %126, %114 ], [ %112, %111 ]
%129 = extractelement <4 x double> %128, i64 0
%130 = fdiv double 1.000000e+00, %129
%131 = extractelement <4 x double> %128, i64 2
%132 = fmul double %130, %131
store double %130, double* %9
store double %129, double* %8
%133 = icmp sgt i32 %0, 1
br i1 %133, label %134, label %136
134: ; preds = %127
%135 = getelementptr inbounds double, double* %8, i64 1
store double %132, double* %135
br label %136
136: ; preds = %134, %127
%137 = icmp slt i32 %1, 2
br i1 %137, label %148, label %138
138: ; preds = %136
%139 = fneg double %132
%140 = extractelement <4 x double> %128, i64 1
%141 = extractelement <4 x double> %128, i64 3
%142 = tail call double @llvm.fmuladd.f64(double %139, double %140, double %141)
%143 = fdiv double 1.000000e+00, %142
%144 = getelementptr inbounds double, double* %9, i64 1
store double %143, double* %144
%145 = getelementptr inbounds double, double* %8, i64 4
store double %140, double* %145
br i1 %133, label %146, label %148
146: ; preds = %138
%147 = getelementptr inbounds double, double* %8, i64 5
store double %142, double* %147
br label %148
148: ; preds = %138, %146, %136
ret void
}