void corner_dttmm_uu_nt_4x4_lib4(double *A, double *B, double *C) {
  const int bs = 4;
  double a_0, a_1, a_2, a_3, b_0, b_1, b_2, b_3,
      c_00 = 0, c_01 = 0, c_02 = 0, c_03 = 0, c_11 = 0, c_12 = 0, c_13 = 0,
      c_22 = 0, c_23 = 0, c_33 = 0;
  a_0 = A[0 + bs * 0];
  b_0 = B[0 + bs * 0];
  b_1 = B[1 + bs * 0];
  b_2 = B[2 + bs * 0];
  b_3 = B[3 + bs * 0];
  c_00 += a_0 * b_0;
  c_01 += a_0 * b_1;
  c_02 += a_0 * b_2;
  c_03 += a_0 * b_3;
  a_0 = A[0 + bs * 1];
  a_1 = A[1 + bs * 1];
  b_1 = B[1 + bs * 1];
  b_2 = B[2 + bs * 1];
  b_3 = B[3 + bs * 1];
  c_01 += a_0 * b_1;
  c_11 += a_1 * b_1;
  c_02 += a_0 * b_2;
  c_12 += a_1 * b_2;
  c_03 += a_0 * b_3;
  c_13 += a_1 * b_3;
  a_0 = A[0 + bs * 2];
  a_1 = A[1 + bs * 2];
  a_2 = A[2 + bs * 2];
  b_2 = B[2 + bs * 2];
  b_3 = B[3 + bs * 2];
  c_02 += a_0 * b_2;
  c_12 += a_1 * b_2;
  c_22 += a_2 * b_2;
  c_03 += a_0 * b_3;
  c_13 += a_1 * b_3;
  c_23 += a_2 * b_3;
  a_0 = A[0 + bs * 3];
  a_1 = A[1 + bs * 3];
  a_2 = A[2 + bs * 3];
  a_3 = A[3 + bs * 3];
  b_3 = B[3 + bs * 3];
  c_03 += a_0 * b_3;
  c_13 += a_1 * b_3;
  c_23 += a_2 * b_3;
  c_33 += a_3 * b_3;
  C[0 + bs * 0] = c_00;
  C[0 + bs * 1] = c_01;
  C[1 + bs * 1] = c_11;
  C[0 + bs * 2] = c_02;
  C[1 + bs * 2] = c_12;
  C[2 + bs * 2] = c_22;
  C[0 + bs * 3] = c_03;
  C[1 + bs * 3] = c_13;
  C[2 + bs * 3] = c_23;
  C[3 + bs * 3] = c_33;
}


x86 assembly (clang, -O0):
<corner_dttmm_uu_nt_4x4_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x4,-0x1c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x78(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x80(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x78(%rax)
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<corner_dttmm_uu_nt_4x4_lib4>:
movsd  (%rdi),%xmm4
movsd  (%rsi),%xmm9
mulsd  %xmm4,%xmm9
xorpd  %xmm8,%xmm8
addsd  %xmm8,%xmm9
movsd  0x8(%rsi),%xmm5
mulsd  %xmm4,%xmm5
addsd  %xmm8,%xmm5
movsd  0x10(%rsi),%xmm7
mulsd  %xmm4,%xmm7
addsd  %xmm8,%xmm7
mulsd  0x18(%rsi),%xmm4
addsd  %xmm8,%xmm4
movupd 0x20(%rdi),%xmm1
movsd  0x28(%rsi),%xmm2
movsd  0x30(%rsi),%xmm6
movsd  0x38(%rsi),%xmm3
unpcklpd %xmm2,%xmm2
movq   %xmm5,%xmm5
mulpd  %xmm1,%xmm2
addpd  %xmm5,%xmm2
unpcklpd %xmm6,%xmm6
movq   %xmm7,%xmm5
mulpd  %xmm1,%xmm6
addpd  %xmm5,%xmm6
unpcklpd %xmm3,%xmm3
movq   %xmm4,%xmm4
mulpd  %xmm1,%xmm3
addpd  %xmm4,%xmm3
movupd 0x40(%rdi),%xmm1
movsd  0x50(%rdi),%xmm7
movsd  0x50(%rsi),%xmm4
movsd  0x58(%rsi),%xmm0
movapd %xmm7,%xmm5
mulsd  %xmm4,%xmm5
unpcklpd %xmm4,%xmm4
mulpd  %xmm1,%xmm4
addpd  %xmm6,%xmm4
addsd  %xmm8,%xmm5
mulsd  %xmm0,%xmm7
unpcklpd %xmm0,%xmm0
mulpd  %xmm1,%xmm0
addpd  %xmm3,%xmm0
addsd  %xmm8,%xmm7
movupd 0x60(%rdi),%xmm1
movupd 0x70(%rdi),%xmm3
movsd  0x78(%rsi),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm1
addpd  %xmm0,%xmm1
movq   %xmm7,%xmm0
mulpd  %xmm3,%xmm6
addpd  %xmm0,%xmm6
movsd  %xmm9,(%rdx)
movupd %xmm2,0x20(%rdx)
movupd %xmm4,0x40(%rdx)
movsd  %xmm5,0x50(%rdx)
movupd %xmm1,0x60(%rdx)
movupd %xmm6,0x70(%rdx)
ret

LLVM IR (-O0):
define void @corner_dttmm_uu_nt_4x4_lib4(double* %0, double* %1, double* %2) {
%4 = alloca double*
%5 = alloca double*
%6 = alloca double*
%7 = alloca i32
%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 double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
store double* %0, double** %4
store double* %1, double** %5
store double* %2, double** %6
store i32 4, i32* %7
store double 0.000000e+00, double* %16
store double 0.000000e+00, double* %17
store double 0.000000e+00, double* %18
store double 0.000000e+00, double* %19
store double 0.000000e+00, double* %20
store double 0.000000e+00, double* %21
store double 0.000000e+00, double* %22
store double 0.000000e+00, double* %23
store double 0.000000e+00, double* %24
store double 0.000000e+00, double* %25
%26 = load double*, double** %4
%27 = getelementptr inbounds double, double* %26, i64 0
%28 = load double, double* %27
store double %28, double* %8
%29 = load double*, double** %5
%30 = getelementptr inbounds double, double* %29, i64 0
%31 = load double, double* %30
store double %31, double* %12
%32 = load double*, double** %5
%33 = getelementptr inbounds double, double* %32, i64 1
%34 = load double, double* %33
store double %34, double* %13
%35 = load double*, double** %5
%36 = getelementptr inbounds double, double* %35, i64 2
%37 = load double, double* %36
store double %37, double* %14
%38 = load double*, double** %5
%39 = getelementptr inbounds double, double* %38, i64 3
%40 = load double, double* %39
store double %40, double* %15
%41 = load double, double* %8
%42 = load double, double* %12
%43 = load double, double* %16
%44 = call double @llvm.fmuladd.f64(double %41, double %42, double %43)
store double %44, double* %16
%45 = load double, double* %8
%46 = load double, double* %13
%47 = load double, double* %17
%48 = call double @llvm.fmuladd.f64(double %45, double %46, double %47)
store double %48, double* %17
%49 = load double, double* %8
%50 = load double, double* %14
%51 = load double, double* %18
%52 = call double @llvm.fmuladd.f64(double %49, double %50, double %51)
store double %52, double* %18
%53 = load double, double* %8
%54 = load double, double* %15
%55 = load double, double* %19
%56 = call double @llvm.fmuladd.f64(double %53, double %54, double %55)
store double %56, double* %19
%57 = load double*, double** %4
%58 = getelementptr inbounds double, double* %57, i64 4
%59 = load double, double* %58
store double %59, double* %8
%60 = load double*, double** %4
%61 = getelementptr inbounds double, double* %60, i64 5
%62 = load double, double* %61
store double %62, double* %9
%63 = load double*, double** %5
%64 = getelementptr inbounds double, double* %63, i64 5
%65 = load double, double* %64
store double %65, double* %13
%66 = load double*, double** %5
%67 = getelementptr inbounds double, double* %66, i64 6
%68 = load double, double* %67
store double %68, double* %14
%69 = load double*, double** %5
%70 = getelementptr inbounds double, double* %69, i64 7
%71 = load double, double* %70
store double %71, double* %15
%72 = load double, double* %8
%73 = load double, double* %13
%74 = load double, double* %17
%75 = call double @llvm.fmuladd.f64(double %72, double %73, double %74)
store double %75, double* %17
%76 = load double, double* %9
%77 = load double, double* %13
%78 = load double, double* %20
%79 = call double @llvm.fmuladd.f64(double %76, double %77, double %78)
store double %79, double* %20
%80 = load double, double* %8
%81 = load double, double* %14
%82 = load double, double* %18
%83 = call double @llvm.fmuladd.f64(double %80, double %81, double %82)
store double %83, double* %18
%84 = load double, double* %9
%85 = load double, double* %14
%86 = load double, double* %21
%87 = call double @llvm.fmuladd.f64(double %84, double %85, double %86)
store double %87, double* %21
%88 = load double, double* %8
%89 = load double, double* %15
%90 = load double, double* %19
%91 = call double @llvm.fmuladd.f64(double %88, double %89, double %90)
store double %91, double* %19
%92 = load double, double* %9
%93 = load double, double* %15
%94 = load double, double* %22
%95 = call double @llvm.fmuladd.f64(double %92, double %93, double %94)
store double %95, double* %22
%96 = load double*, double** %4
%97 = getelementptr inbounds double, double* %96, i64 8
%98 = load double, double* %97
store double %98, double* %8
%99 = load double*, double** %4
%100 = getelementptr inbounds double, double* %99, i64 9
%101 = load double, double* %100
store double %101, double* %9
%102 = load double*, double** %4
%103 = getelementptr inbounds double, double* %102, i64 10
%104 = load double, double* %103
store double %104, double* %10
%105 = load double*, double** %5
%106 = getelementptr inbounds double, double* %105, i64 10
%107 = load double, double* %106
store double %107, double* %14
%108 = load double*, double** %5
%109 = getelementptr inbounds double, double* %108, i64 11
%110 = load double, double* %109
store double %110, double* %15
%111 = load double, double* %8
%112 = load double, double* %14
%113 = load double, double* %18
%114 = call double @llvm.fmuladd.f64(double %111, double %112, double %113)
store double %114, double* %18
%115 = load double, double* %9
%116 = load double, double* %14
%117 = load double, double* %21
%118 = call double @llvm.fmuladd.f64(double %115, double %116, double %117)
store double %118, double* %21
%119 = load double, double* %10
%120 = load double, double* %14
%121 = load double, double* %23
%122 = call double @llvm.fmuladd.f64(double %119, double %120, double %121)
store double %122, double* %23
%123 = load double, double* %8
%124 = load double, double* %15
%125 = load double, double* %19
%126 = call double @llvm.fmuladd.f64(double %123, double %124, double %125)
store double %126, double* %19
%127 = load double, double* %9
%128 = load double, double* %15
%129 = load double, double* %22
%130 = call double @llvm.fmuladd.f64(double %127, double %128, double %129)
store double %130, double* %22
%131 = load double, double* %10
%132 = load double, double* %15
%133 = load double, double* %24
%134 = call double @llvm.fmuladd.f64(double %131, double %132, double %133)
store double %134, double* %24
%135 = load double*, double** %4
%136 = getelementptr inbounds double, double* %135, i64 12
%137 = load double, double* %136
store double %137, double* %8
%138 = load double*, double** %4
%139 = getelementptr inbounds double, double* %138, i64 13
%140 = load double, double* %139
store double %140, double* %9
%141 = load double*, double** %4
%142 = getelementptr inbounds double, double* %141, i64 14
%143 = load double, double* %142
store double %143, double* %10
%144 = load double*, double** %4
%145 = getelementptr inbounds double, double* %144, i64 15
%146 = load double, double* %145
store double %146, double* %11
%147 = load double*, double** %5
%148 = getelementptr inbounds double, double* %147, i64 15
%149 = load double, double* %148
store double %149, double* %15
%150 = load double, double* %8
%151 = load double, double* %15
%152 = load double, double* %19
%153 = call double @llvm.fmuladd.f64(double %150, double %151, double %152)
store double %153, double* %19
%154 = load double, double* %9
%155 = load double, double* %15
%156 = load double, double* %22
%157 = call double @llvm.fmuladd.f64(double %154, double %155, double %156)
store double %157, double* %22
%158 = load double, double* %10
%159 = load double, double* %15
%160 = load double, double* %24
%161 = call double @llvm.fmuladd.f64(double %158, double %159, double %160)
store double %161, double* %24
%162 = load double, double* %11
%163 = load double, double* %15
%164 = load double, double* %25
%165 = call double @llvm.fmuladd.f64(double %162, double %163, double %164)
store double %165, double* %25
%166 = load double, double* %16
%167 = load double*, double** %6
%168 = getelementptr inbounds double, double* %167, i64 0
store double %166, double* %168
%169 = load double, double* %17
%170 = load double*, double** %6
%171 = getelementptr inbounds double, double* %170, i64 4
store double %169, double* %171
%172 = load double, double* %20
%173 = load double*, double** %6
%174 = getelementptr inbounds double, double* %173, i64 5
store double %172, double* %174
%175 = load double, double* %18
%176 = load double*, double** %6
%177 = getelementptr inbounds double, double* %176, i64 8
store double %175, double* %177
%178 = load double, double* %21
%179 = load double*, double** %6
%180 = getelementptr inbounds double, double* %179, i64 9
store double %178, double* %180
%181 = load double, double* %23
%182 = load double*, double** %6
%183 = getelementptr inbounds double, double* %182, i64 10
store double %181, double* %183
%184 = load double, double* %19
%185 = load double*, double** %6
%186 = getelementptr inbounds double, double* %185, i64 12
store double %184, double* %186
%187 = load double, double* %22
%188 = load double*, double** %6
%189 = getelementptr inbounds double, double* %188, i64 13
store double %187, double* %189
%190 = load double, double* %24
%191 = load double*, double** %6
%192 = getelementptr inbounds double, double* %191, i64 14
store double %190, double* %192
%193 = load double, double* %25
%194 = load double*, double** %6
%195 = getelementptr inbounds double, double* %194, i64 15
store double %193, double* %195
ret void
}

LLVM IR (-O2):
define void @corner_dttmm_uu_nt_4x4_lib4(double* nocapture %0, double* nocapture %1, double* nocapture writeonly %2) {
%4 = load double, double* %0
%5 = load double, double* %1
%6 = getelementptr inbounds double, double* %1, i64 1
%7 = load double, double* %6
%8 = getelementptr inbounds double, double* %1, i64 2
%9 = load double, double* %8
%10 = getelementptr inbounds double, double* %1, i64 3
%11 = load double, double* %10
%12 = tail call double @llvm.fmuladd.f64(double %4, double %5, double 0.000000e+00)
%13 = tail call double @llvm.fmuladd.f64(double %4, double %7, double 0.000000e+00)
%14 = tail call double @llvm.fmuladd.f64(double %4, double %9, double 0.000000e+00)
%15 = tail call double @llvm.fmuladd.f64(double %4, double %11, double 0.000000e+00)
%16 = getelementptr inbounds double, double* %0, i64 4
%17 = bitcast double* %16 to <2 x double>*
%18 = load <2 x double>, <2 x double>* %17
%19 = getelementptr inbounds double, double* %1, i64 5
%20 = load double, double* %19
%21 = getelementptr inbounds double, double* %1, i64 6
%22 = load double, double* %21
%23 = getelementptr inbounds double, double* %1, i64 7
%24 = load double, double* %23
%25 = insertelement <2 x double> poison, double %20, i64 0
%26 = shufflevector <2 x double> %25, <2 x double> poison, <2 x i32> zeroinitializer
%27 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %13, i64 0
%28 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %18, <2 x double> %26, <2 x double> %27)
%29 = insertelement <2 x double> poison, double %22, i64 0
%30 = shufflevector <2 x double> %29, <2 x double> poison, <2 x i32> zeroinitializer
%31 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %14, i64 0
%32 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %18, <2 x double> %30, <2 x double> %31)
%33 = insertelement <2 x double> poison, double %24, i64 0
%34 = shufflevector <2 x double> %33, <2 x double> poison, <2 x i32> zeroinitializer
%35 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %15, i64 0
%36 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %18, <2 x double> %34, <2 x double> %35)
%37 = getelementptr inbounds double, double* %0, i64 8
%38 = bitcast double* %37 to <2 x double>*
%39 = load <2 x double>, <2 x double>* %38
%40 = getelementptr inbounds double, double* %0, i64 10
%41 = load double, double* %40
%42 = getelementptr inbounds double, double* %1, i64 10
%43 = load double, double* %42
%44 = getelementptr inbounds double, double* %1, i64 11
%45 = load double, double* %44
%46 = insertelement <2 x double> poison, double %43, i64 0
%47 = shufflevector <2 x double> %46, <2 x double> poison, <2 x i32> zeroinitializer
%48 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %39, <2 x double> %47, <2 x double> %32)
%49 = tail call double @llvm.fmuladd.f64(double %41, double %43, double 0.000000e+00)
%50 = insertelement <2 x double> poison, double %45, i64 0
%51 = shufflevector <2 x double> %50, <2 x double> poison, <2 x i32> zeroinitializer
%52 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %39, <2 x double> %51, <2 x double> %36)
%53 = tail call double @llvm.fmuladd.f64(double %41, double %45, double 0.000000e+00)
%54 = getelementptr inbounds double, double* %0, i64 12
%55 = bitcast double* %54 to <2 x double>*
%56 = load <2 x double>, <2 x double>* %55
%57 = getelementptr inbounds double, double* %0, i64 14
%58 = bitcast double* %57 to <2 x double>*
%59 = load <2 x double>, <2 x double>* %58
%60 = getelementptr inbounds double, double* %1, i64 15
%61 = load double, double* %60
%62 = insertelement <2 x double> poison, double %61, i64 0
%63 = shufflevector <2 x double> %62, <2 x double> poison, <2 x i32> zeroinitializer
%64 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %56, <2 x double> %63, <2 x double> %52)
%65 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %53, i64 0
%66 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %59, <2 x double> %63, <2 x double> %65)
store double %12, double* %2
%67 = getelementptr inbounds double, double* %2, i64 4
%68 = bitcast double* %67 to <2 x double>*
store <2 x double> %28, <2 x double>* %68
%69 = getelementptr inbounds double, double* %2, i64 8
%70 = bitcast double* %69 to <2 x double>*
store <2 x double> %48, <2 x double>* %70
%71 = getelementptr inbounds double, double* %2, i64 10
store double %49, double* %71
%72 = getelementptr inbounds double, double* %2, i64 12
%73 = bitcast double* %72 to <2 x double>*
store <2 x double> %64, <2 x double>* %73
%74 = getelementptr inbounds double, double* %2, i64 14
%75 = bitcast double* %74 to <2 x double>*
store <2 x double> %66, <2 x double>* %75
ret void
}