void corner_dtrmm_l_u_nt_3x4_lib4(double *A, double *B, int alg, double *C,
                                  double *D) {
  const int bs = 4;
  double a_0, a_1, a_2, b_0, d_0, d_4, d_8, d_c, d_1, d_5, d_9, d_d, d_2, d_6,
      d_a, d_e;
  a_0 = A[0];
  a_1 = A[1];
  a_2 = A[2];
  b_0 = B[0];
  d_0 = a_0 * b_0;
  d_1 = a_1 * b_0;
  d_2 = a_2 * b_0;
  b_0 = B[1];
  d_4 = a_0 * b_0;
  d_5 = a_1 * b_0;
  d_6 = a_2 * b_0;
  b_0 = B[2];
  d_8 = a_0 * b_0;
  d_9 = a_1 * b_0;
  d_a = a_2 * b_0;
  b_0 = B[3];
  d_c = a_0 * b_0;
  d_d = a_1 * b_0;
  d_e = a_2 * b_0;
  a_0 = A[4];
  a_1 = A[5];
  a_2 = A[6];
  b_0 = B[4];
  d_0 += a_0 * b_0;
  d_1 += a_1 * b_0;
  d_2 += a_2 * b_0;
  b_0 = B[5];
  d_4 += a_0 * b_0;
  d_5 += a_1 * b_0;
  d_6 += a_2 * b_0;
  b_0 = B[6];
  d_8 += a_0 * b_0;
  d_9 += a_1 * b_0;
  d_a += a_2 * b_0;
  b_0 = B[7];
  d_c += a_0 * b_0;
  d_d += a_1 * b_0;
  d_e += a_2 * b_0;
  a_0 = A[8];
  a_1 = A[9];
  a_2 = A[10];
  b_0 = B[8];
  d_0 += a_0 * b_0;
  d_1 += a_1 * b_0;
  d_2 += a_2 * b_0;
  b_0 = B[9];
  d_4 += a_0 * b_0;
  d_5 += a_1 * b_0;
  d_6 += a_2 * b_0;
  b_0 = B[10];
  d_8 += a_0 * b_0;
  d_9 += a_1 * b_0;
  d_a += a_2 * b_0;
  b_0 = B[11];
  d_c += a_0 * b_0;
  d_d += a_1 * b_0;
  d_e += a_2 * b_0;
  if (alg != 0) {
    if (alg == 1) {
      d_0 = C[0 + bs * 0] + d_0;
      d_1 = C[1 + bs * 0] + d_1;
      d_2 = C[2 + bs * 0] + d_2;
      d_4 = C[0 + bs * 1] + d_4;
      d_5 = C[1 + bs * 1] + d_5;
      d_6 = C[2 + bs * 1] + d_6;
      d_8 = C[0 + bs * 2] + d_8;
      d_9 = C[1 + bs * 2] + d_9;
      d_a = C[2 + bs * 2] + d_a;
      d_c = C[0 + bs * 3] + d_c;
      d_d = C[1 + bs * 3] + d_d;
      d_e = C[2 + bs * 3] + d_e;
    } else {
      d_0 = C[0 + bs * 0] - d_0;
      d_1 = C[1 + bs * 0] - d_1;
      d_2 = C[2 + bs * 0] - d_2;
      d_4 = C[0 + bs * 1] - d_4;
      d_5 = C[1 + bs * 1] - d_5;
      d_6 = C[2 + bs * 1] - d_6;
      d_8 = C[0 + bs * 2] - d_8;
      d_9 = C[1 + bs * 2] - d_9;
      d_a = C[2 + bs * 2] - d_a;
      d_c = C[0 + bs * 3] - d_c;
      d_d = C[1 + bs * 3] - d_d;
      d_e = C[2 + bs * 3] - d_e;
    }
  }
  D[0 + bs * 0] = d_0;
  D[1 + bs * 0] = d_1;
  D[2 + bs * 0] = d_2;
  D[0 + bs * 1] = d_4;
  D[1 + bs * 1] = d_5;
  D[2 + bs * 1] = d_6;
  D[0 + bs * 2] = d_8;
  D[1 + bs * 2] = d_9;
  D[2 + bs * 2] = d_a;
  D[0 + bs * 3] = d_c;
  D[1 + bs * 3] = d_d;
  D[2 + bs * 3] = d_e;
}


x86 assembly (clang, -O0):
<corner_dtrmm_l_u_nt_3x4_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movl   $0x4,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
cmpl   $0x0,-0x14(%rbp)
je     1820 <corner_dtrmm_l_u_nt_3x4_lib4+0x720>
cmpl   $0x1,-0x14(%rbp)
jne    1714 <corner_dtrmm_l_u_nt_3x4_lib4+0x614>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x40(%rax),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x48(%rax),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x50(%rax),%xmm0
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x60(%rax),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x68(%rax),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x70(%rax),%xmm0
addsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
jmp    181b <corner_dtrmm_l_u_nt_3x4_lib4+0x71b>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
subsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x40(%rax),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x48(%rax),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x50(%rax),%xmm0
subsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x60(%rax),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x68(%rax),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x70(%rax),%xmm0
subsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
jmp    1820 <corner_dtrmm_l_u_nt_3x4_lib4+0x720>
movsd  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x78(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x60(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x70(%rax)
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<corner_dtrmm_l_u_nt_3x4_lib4>:
movupd (%rdi),%xmm1
movupd (%rsi),%xmm2
movupd 0x10(%rsi),%xmm10
movupd 0x20(%rsi),%xmm8
movupd 0x30(%rsi),%xmm9
movapd %xmm2,%xmm3
movapd %xmm10,%xmm11
movapd %xmm10,%xmm5
movsd  0x10(%rdi),%xmm0
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm10
mulpd  %xmm2,%xmm0
unpcklpd %xmm2,%xmm2
mulpd  %xmm1,%xmm2
unpckhpd %xmm3,%xmm3
mulpd  %xmm1,%xmm3
unpcklpd %xmm11,%xmm11
mulpd  %xmm1,%xmm11
unpckhpd %xmm5,%xmm5
mulpd  %xmm1,%xmm5
movupd 0x20(%rdi),%xmm4
movapd %xmm8,%xmm6
unpcklpd %xmm8,%xmm6
mulpd  %xmm4,%xmm6
addpd  %xmm2,%xmm6
movapd %xmm8,%xmm7
unpckhpd %xmm8,%xmm7
mulpd  %xmm4,%xmm7
addpd  %xmm3,%xmm7
movapd %xmm9,%xmm2
movsd  0x30(%rdi),%xmm3
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm8
mulpd  %xmm9,%xmm3
movapd %xmm9,%xmm1
unpcklpd %xmm9,%xmm1
mulpd  %xmm4,%xmm1
addpd  %xmm11,%xmm1
unpckhpd %xmm9,%xmm2
mulpd  %xmm4,%xmm2
addpd  %xmm5,%xmm2
addpd  %xmm0,%xmm8
addpd  %xmm10,%xmm3
movupd 0x40(%rdi),%xmm12
movupd 0x40(%rsi),%xmm0
movapd %xmm0,%xmm9
movupd 0x50(%rsi),%xmm11
movapd %xmm11,%xmm10
movapd %xmm11,%xmm4
movsd  0x50(%rdi),%xmm5
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm11
mulpd  %xmm0,%xmm5
unpcklpd %xmm0,%xmm0
mulpd  %xmm12,%xmm0
addpd  %xmm6,%xmm0
unpckhpd %xmm9,%xmm9
mulpd  %xmm12,%xmm9
addpd  %xmm7,%xmm9
unpcklpd %xmm10,%xmm10
mulpd  %xmm12,%xmm10
addpd  %xmm1,%xmm10
unpckhpd %xmm4,%xmm4
mulpd  %xmm12,%xmm4
addpd  %xmm2,%xmm4
addpd  %xmm3,%xmm11
addpd  %xmm8,%xmm5
test   %edx,%edx
je     12ec <corner_dtrmm_l_u_nt_3x4_lib4+0x1ec>
cmp    $0x1,%edx
jne    128c <corner_dtrmm_l_u_nt_3x4_lib4+0x18c>
movupd (%rcx),%xmm1
addpd  %xmm1,%xmm0
movupd 0x20(%rcx),%xmm1
addpd  %xmm1,%xmm9
movupd 0x40(%rcx),%xmm1
addpd  %xmm1,%xmm10
movupd 0x60(%rcx),%xmm1
addpd  %xmm1,%xmm4
movsd  0x10(%rcx),%xmm1
movhpd 0x30(%rcx),%xmm1
movsd  0x50(%rcx),%xmm2
movhpd 0x70(%rcx),%xmm2
addpd  %xmm2,%xmm11
addpd  %xmm1,%xmm5
jmp    12ec <corner_dtrmm_l_u_nt_3x4_lib4+0x1ec>
movupd (%rcx),%xmm8
subpd  %xmm0,%xmm8
movupd 0x20(%rcx),%xmm2
subpd  %xmm9,%xmm2
movupd 0x40(%rcx),%xmm3
subpd  %xmm10,%xmm3
movupd 0x60(%rcx),%xmm6
subpd  %xmm4,%xmm6
movsd  0x10(%rcx),%xmm7
movhpd 0x30(%rcx),%xmm7
movsd  0x50(%rcx),%xmm1
movhpd 0x70(%rcx),%xmm1
subpd  %xmm11,%xmm1
subpd  %xmm5,%xmm7
movapd %xmm8,%xmm0
movapd %xmm2,%xmm9
movapd %xmm3,%xmm10
movapd %xmm6,%xmm4
movapd %xmm7,%xmm5
movapd %xmm1,%xmm11
movupd %xmm0,(%r8)
movlpd %xmm5,0x10(%r8)
movupd %xmm9,0x20(%r8)
movhpd %xmm5,0x30(%r8)
movupd %xmm10,0x40(%r8)
movlpd %xmm11,0x50(%r8)
movupd %xmm4,0x60(%r8)
movhpd %xmm11,0x70(%r8)
ret

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

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