void kernel_dttmm_uu_nt_4x2_lib4(int kmax, double *A, double *B, double *C) {
  const int bs = 4;
  int k = 0;
  double a_0, a_1, a_2, a_3, b_0, b_1, c_00 = 0, c_01 = 0, c_10 = 0, c_11 = 0,
                                       c_20 = 0, c_21 = 0, c_30 = 0, c_31 = 0;
  a_0 = A[0 + bs * 0];
  b_0 = B[0 + bs * 0];
  b_1 = B[1 + bs * 0];
  c_00 += a_0 * b_0;
  c_01 += a_0 * b_1;
  a_0 = A[0 + bs * 1];
  a_1 = A[1 + bs * 1];
  b_0 = B[0 + bs * 1];
  b_1 = B[1 + bs * 1];
  c_00 += a_0 * b_0;
  c_10 += a_1 * b_0;
  c_01 += a_0 * b_1;
  c_11 += a_1 * b_1;
  a_0 = A[0 + bs * 2];
  a_1 = A[1 + bs * 2];
  a_2 = A[2 + bs * 2];
  b_0 = B[0 + bs * 2];
  b_1 = B[1 + bs * 2];
  c_00 += a_0 * b_0;
  c_10 += a_1 * b_0;
  c_20 += a_2 * b_0;
  c_01 += a_0 * b_1;
  c_11 += a_1 * b_1;
  c_21 += a_2 * b_1;
  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_0 = B[0 + bs * 3];
  b_1 = B[1 + bs * 3];
  c_00 += a_0 * b_0;
  c_10 += a_1 * b_0;
  c_20 += a_2 * b_0;
  c_30 += a_3 * b_0;
  c_01 += a_0 * b_1;
  c_11 += a_1 * b_1;
  c_21 += a_2 * b_1;
  c_31 += a_3 * b_1;
  A += 4 * bs;
  B += 4 * bs;
  k = 4;
  for (; k < kmax - 4; k += 4) {
    a_0 = A[0 + bs * 0];
    a_1 = A[1 + bs * 0];
    a_2 = A[2 + bs * 0];
    a_3 = A[3 + bs * 0];
    b_0 = B[0 + bs * 0];
    b_1 = B[1 + bs * 0];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_01 += a_0 * b_1;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    a_0 = A[0 + bs * 1];
    a_1 = A[1 + bs * 1];
    a_2 = A[2 + bs * 1];
    a_3 = A[3 + bs * 1];
    b_0 = B[0 + bs * 1];
    b_1 = B[1 + bs * 1];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_01 += a_0 * b_1;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    a_0 = A[0 + bs * 2];
    a_1 = A[1 + bs * 2];
    a_2 = A[2 + bs * 2];
    a_3 = A[3 + bs * 2];
    b_0 = B[0 + bs * 2];
    b_1 = B[1 + bs * 2];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_01 += a_0 * b_1;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    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_0 = B[0 + bs * 3];
    b_1 = B[1 + bs * 3];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_01 += a_0 * b_1;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    A += 4 * bs;
    B += 4 * bs;
  }
  a_0 = A[0 + bs * 0];
  a_1 = A[1 + bs * 0];
  a_2 = A[2 + bs * 0];
  a_3 = A[3 + bs * 0];
  b_0 = B[0 + bs * 0];
  b_1 = B[1 + bs * 0];
  c_00 += a_0 * b_0;
  c_10 += a_1 * b_0;
  c_20 += a_2 * b_0;
  c_30 += a_3 * b_0;
  c_01 += a_0 * b_1;
  c_11 += a_1 * b_1;
  c_21 += a_2 * b_1;
  c_31 += a_3 * b_1;
  a_0 = A[0 + bs * 1];
  a_1 = A[1 + bs * 1];
  a_2 = A[2 + bs * 1];
  a_3 = A[3 + bs * 1];
  b_1 = B[1 + bs * 1];
  c_01 += a_0 * b_1;
  c_11 += a_1 * b_1;
  c_21 += a_2 * b_1;
  c_31 += a_3 * b_1;
  C[0 + bs * 0] = c_00;
  C[1 + bs * 0] = c_10;
  C[2 + bs * 0] = c_20;
  C[3 + bs * 0] = c_30;
  C[0 + bs * 1] = c_01;
  C[1 + bs * 1] = c_11;
  C[2 + bs * 1] = c_21;
  C[3 + bs * 1] = c_31;
}


x86 assembly (clang, -O0):
<kernel_dttmm_uu_nt_4x2_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x18,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movl   $0x4,-0x24(%rbp)
movl   $0x0,-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)
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
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x38(%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  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%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  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%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  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
movl   $0x4,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x4,%ecx
cmp    %ecx,%eax
jge    1a24 <kernel_dttmm_uu_nt_4x2_lib4+0x924>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%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  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%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  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%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  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%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  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x28(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x28(%rbp)
jmp    14d3 <kernel_dttmm_uu_nt_4x2_lib4+0x3d3>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%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  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x70(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x80(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x68(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x78(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x38(%rax)
add    $0x18,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dttmm_uu_nt_4x2_lib4>:
movsd  (%rsi),%xmm1
movsd  (%rdx),%xmm2
mulsd  %xmm1,%xmm2
xorpd  %xmm0,%xmm0
addsd  %xmm0,%xmm2
mulsd  0x8(%rdx),%xmm1
addsd  %xmm0,%xmm1
movupd 0x20(%rsi),%xmm4
movsd  0x20(%rdx),%xmm5
movsd  0x28(%rdx),%xmm3
unpcklpd %xmm5,%xmm5
movq   %xmm2,%xmm2
mulpd  %xmm4,%xmm5
addpd  %xmm2,%xmm5
unpcklpd %xmm3,%xmm3
movq   %xmm1,%xmm1
mulpd  %xmm4,%xmm3
addpd  %xmm1,%xmm3
movupd 0x40(%rsi),%xmm4
movsd  0x50(%rsi),%xmm1
movsd  0x40(%rdx),%xmm6
movsd  0x48(%rdx),%xmm2
movapd %xmm1,%xmm7
mulsd  %xmm6,%xmm7
unpcklpd %xmm6,%xmm6
mulpd  %xmm4,%xmm6
addpd  %xmm5,%xmm6
addsd  %xmm0,%xmm7
mulsd  %xmm2,%xmm1
unpcklpd %xmm2,%xmm2
mulpd  %xmm4,%xmm2
addpd  %xmm3,%xmm2
addsd  %xmm0,%xmm1
movupd 0x60(%rsi),%xmm8
movupd 0x70(%rsi),%xmm0
movsd  0x60(%rdx),%xmm9
unpcklpd %xmm9,%xmm9
movapd %xmm8,%xmm11
mulpd  %xmm9,%xmm11
addpd  %xmm6,%xmm11
movq   %xmm7,%xmm3
mulpd  %xmm0,%xmm9
addpd  %xmm3,%xmm9
movsd  0x68(%rdx),%xmm10
unpcklpd %xmm10,%xmm10
mulpd  %xmm10,%xmm8
addpd  %xmm2,%xmm8
movq   %xmm1,%xmm1
mulpd  %xmm0,%xmm10
addpd  %xmm1,%xmm10
lea    0x80(%rsi),%rax
lea    0x80(%rdx),%r8
cmp    $0x9,%edi
jl     137f <kernel_dttmm_uu_nt_4x2_lib4+0x27f>
add    $0xfffffffc,%edi
mov    $0x4,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movupd (%rax),%xmm3
movupd 0x10(%rax),%xmm6
movupd 0x20(%rax),%xmm13
movupd 0x30(%rax),%xmm12
movsd  (%r8),%xmm5
movsd  0x8(%r8),%xmm4
movsd  0x20(%r8),%xmm1
movsd  0x28(%r8),%xmm0
unpcklpd %xmm5,%xmm5
movapd %xmm3,%xmm2
mulpd  %xmm5,%xmm2
addpd  %xmm11,%xmm2
mulpd  %xmm6,%xmm5
addpd  %xmm9,%xmm5
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm3
addpd  %xmm8,%xmm3
mulpd  %xmm6,%xmm4
addpd  %xmm10,%xmm4
unpcklpd %xmm1,%xmm1
movapd %xmm13,%xmm7
mulpd  %xmm1,%xmm7
addpd  %xmm2,%xmm7
mulpd  %xmm12,%xmm1
addpd  %xmm5,%xmm1
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm13
addpd  %xmm3,%xmm13
mulpd  %xmm12,%xmm0
addpd  %xmm4,%xmm0
movupd 0x40(%rax),%xmm5
movupd 0x50(%rax),%xmm2
movsd  0x40(%r8),%xmm4
unpcklpd %xmm4,%xmm4
movapd %xmm5,%xmm6
mulpd  %xmm4,%xmm6
addpd  %xmm7,%xmm6
mulpd  %xmm2,%xmm4
addpd  %xmm1,%xmm4
movsd  0x48(%r8),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm5
addpd  %xmm13,%xmm5
mulpd  %xmm2,%xmm1
addpd  %xmm0,%xmm1
movupd 0x60(%rax),%xmm0
movupd 0x70(%rax),%xmm10
movsd  0x60(%r8),%xmm7
unpcklpd %xmm7,%xmm7
movapd %xmm0,%xmm3
mulpd  %xmm7,%xmm3
movapd %xmm3,%xmm11
addpd  %xmm6,%xmm11
mulpd  %xmm10,%xmm7
movapd %xmm7,%xmm9
addpd  %xmm4,%xmm9
movsd  0x68(%r8),%xmm2
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm0
movapd %xmm0,%xmm8
addpd  %xmm5,%xmm8
mulpd  %xmm10,%xmm2
movapd %xmm2,%xmm10
addpd  %xmm1,%xmm10
add    $0x4,%edx
sub    $0xffffffffffffff80,%rax
sub    $0xffffffffffffff80,%r8
cmp    %edi,%edx
jl     1210 <kernel_dttmm_uu_nt_4x2_lib4+0x110>
addpd  %xmm1,%xmm2
addpd  %xmm5,%xmm0
addpd  %xmm4,%xmm7
addpd  %xmm6,%xmm3
lea    -0x80(%r8),%rdx
mov    %rax,%rsi
add    $0xffffffffffffff80,%rsi
movapd %xmm3,%xmm11
movapd %xmm7,%xmm9
movapd %xmm0,%xmm8
movapd %xmm2,%xmm10
movsd  (%rax),%xmm1
movhpd 0x88(%rsi),%xmm1
movsd  (%r8),%xmm0
unpcklpd %xmm0,%xmm0
movapd %xmm1,%xmm2
mulpd  %xmm0,%xmm2
addpd  %xmm11,%xmm2
movupd 0x90(%rsi),%xmm3
movupd 0xa0(%rsi),%xmm4
movupd 0xb0(%rsi),%xmm5
mulpd  %xmm3,%xmm0
addpd  %xmm9,%xmm0
movsd  0x88(%rdx),%xmm6
movsd  0xa8(%rdx),%xmm7
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm1
addpd  %xmm8,%xmm1
mulpd  %xmm3,%xmm6
addpd  %xmm10,%xmm6
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm4
addpd  %xmm1,%xmm4
mulpd  %xmm5,%xmm7
addpd  %xmm6,%xmm7
movupd %xmm2,(%rcx)
movupd %xmm0,0x10(%rcx)
movupd %xmm4,0x20(%rcx)
movupd %xmm7,0x30(%rcx)
ret

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

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