void matrix_4x4_multiply_f_f_f(const float *__restrict__ src1,
                               const float *__restrict__ src2,
                               float *__restrict__ dest) {
  *(dest + (0 + (0 << 2))) =
      (*(src1 + (0 + (0 << 2))) * *(src2 + (0 + (0 << 2)))) +
      (*(src1 + (0 + (1 << 2))) * *(src2 + (1 + (0 << 2)))) +
      (*(src1 + (0 + (2 << 2))) * *(src2 + (2 + (0 << 2)))) +
      (*(src1 + (0 + (3 << 2))) * *(src2 + (3 + (0 << 2))));
  *(dest + (0 + (1 << 2))) =
      (*(src1 + (0 + (0 << 2))) * *(src2 + (0 + (1 << 2)))) +
      (*(src1 + (0 + (1 << 2))) * *(src2 + (1 + (1 << 2)))) +
      (*(src1 + (0 + (2 << 2))) * *(src2 + (2 + (1 << 2)))) +
      (*(src1 + (0 + (3 << 2))) * *(src2 + (3 + (1 << 2))));
  *(dest + (0 + (2 << 2))) =
      (*(src1 + (0 + (0 << 2))) * *(src2 + (0 + (2 << 2)))) +
      (*(src1 + (0 + (1 << 2))) * *(src2 + (1 + (2 << 2)))) +
      (*(src1 + (0 + (2 << 2))) * *(src2 + (2 + (2 << 2)))) +
      (*(src1 + (0 + (3 << 2))) * *(src2 + (3 + (2 << 2))));
  *(dest + (0 + (3 << 2))) =
      (*(src1 + (0 + (0 << 2))) * *(src2 + (0 + (3 << 2)))) +
      (*(src1 + (0 + (1 << 2))) * *(src2 + (1 + (3 << 2)))) +
      (*(src1 + (0 + (2 << 2))) * *(src2 + (2 + (3 << 2)))) +
      (*(src1 + (0 + (3 << 2))) * *(src2 + (3 + (3 << 2))));
  *(dest + (1 + (0 << 2))) =
      (*(src1 + (1 + (0 << 2))) * *(src2 + (0 + (0 << 2)))) +
      (*(src1 + (1 + (1 << 2))) * *(src2 + (1 + (0 << 2)))) +
      (*(src1 + (1 + (2 << 2))) * *(src2 + (2 + (0 << 2)))) +
      (*(src1 + (1 + (3 << 2))) * *(src2 + (3 + (0 << 2))));
  *(dest + (1 + (1 << 2))) =
      (*(src1 + (1 + (0 << 2))) * *(src2 + (0 + (1 << 2)))) +
      (*(src1 + (1 + (1 << 2))) * *(src2 + (1 + (1 << 2)))) +
      (*(src1 + (1 + (2 << 2))) * *(src2 + (2 + (1 << 2)))) +
      (*(src1 + (1 + (3 << 2))) * *(src2 + (3 + (1 << 2))));
  *(dest + (1 + (2 << 2))) =
      (*(src1 + (1 + (0 << 2))) * *(src2 + (0 + (2 << 2)))) +
      (*(src1 + (1 + (1 << 2))) * *(src2 + (1 + (2 << 2)))) +
      (*(src1 + (1 + (2 << 2))) * *(src2 + (2 + (2 << 2)))) +
      (*(src1 + (1 + (3 << 2))) * *(src2 + (3 + (2 << 2))));
  *(dest + (1 + (3 << 2))) =
      (*(src1 + (1 + (0 << 2))) * *(src2 + (0 + (3 << 2)))) +
      (*(src1 + (1 + (1 << 2))) * *(src2 + (1 + (3 << 2)))) +
      (*(src1 + (1 + (2 << 2))) * *(src2 + (2 + (3 << 2)))) +
      (*(src1 + (1 + (3 << 2))) * *(src2 + (3 + (3 << 2))));
  *(dest + (2 + (0 << 2))) =
      (*(src1 + (2 + (0 << 2))) * *(src2 + (0 + (0 << 2)))) +
      (*(src1 + (2 + (1 << 2))) * *(src2 + (1 + (0 << 2)))) +
      (*(src1 + (2 + (2 << 2))) * *(src2 + (2 + (0 << 2)))) +
      (*(src1 + (2 + (3 << 2))) * *(src2 + (3 + (0 << 2))));
  *(dest + (2 + (1 << 2))) =
      (*(src1 + (2 + (0 << 2))) * *(src2 + (0 + (1 << 2)))) +
      (*(src1 + (2 + (1 << 2))) * *(src2 + (1 + (1 << 2)))) +
      (*(src1 + (2 + (2 << 2))) * *(src2 + (2 + (1 << 2)))) +
      (*(src1 + (2 + (3 << 2))) * *(src2 + (3 + (1 << 2))));
  *(dest + (2 + (2 << 2))) =
      (*(src1 + (2 + (0 << 2))) * *(src2 + (0 + (2 << 2)))) +
      (*(src1 + (2 + (1 << 2))) * *(src2 + (1 + (2 << 2)))) +
      (*(src1 + (2 + (2 << 2))) * *(src2 + (2 + (2 << 2)))) +
      (*(src1 + (2 + (3 << 2))) * *(src2 + (3 + (2 << 2))));
  *(dest + (2 + (3 << 2))) =
      (*(src1 + (2 + (0 << 2))) * *(src2 + (0 + (3 << 2)))) +
      (*(src1 + (2 + (1 << 2))) * *(src2 + (1 + (3 << 2)))) +
      (*(src1 + (2 + (2 << 2))) * *(src2 + (2 + (3 << 2)))) +
      (*(src1 + (2 + (3 << 2))) * *(src2 + (3 + (3 << 2))));
  *(dest + (3 + (0 << 2))) =
      (*(src1 + (3 + (0 << 2))) * *(src2 + (0 + (0 << 2)))) +
      (*(src1 + (3 + (1 << 2))) * *(src2 + (1 + (0 << 2)))) +
      (*(src1 + (3 + (2 << 2))) * *(src2 + (2 + (0 << 2)))) +
      (*(src1 + (3 + (3 << 2))) * *(src2 + (3 + (0 << 2))));
  *(dest + (3 + (1 << 2))) =
      (*(src1 + (3 + (0 << 2))) * *(src2 + (0 + (1 << 2)))) +
      (*(src1 + (3 + (1 << 2))) * *(src2 + (1 + (1 << 2)))) +
      (*(src1 + (3 + (2 << 2))) * *(src2 + (2 + (1 << 2)))) +
      (*(src1 + (3 + (3 << 2))) * *(src2 + (3 + (1 << 2))));
  *(dest + (3 + (2 << 2))) =
      (*(src1 + (3 + (0 << 2))) * *(src2 + (0 + (2 << 2)))) +
      (*(src1 + (3 + (1 << 2))) * *(src2 + (1 + (2 << 2)))) +
      (*(src1 + (3 + (2 << 2))) * *(src2 + (2 + (2 << 2)))) +
      (*(src1 + (3 + (3 << 2))) * *(src2 + (3 + (2 << 2))));
  *(dest + (3 + (3 << 2))) =
      (*(src1 + (3 + (0 << 2))) * *(src2 + (0 + (3 << 2)))) +
      (*(src1 + (3 + (1 << 2))) * *(src2 + (1 + (3 << 2)))) +
      (*(src1 + (3 + (2 << 2))) * *(src2 + (2 + (3 << 2)))) +
      (*(src1 + (3 + (3 << 2))) * *(src2 + (3 + (3 << 2))));
}


x86 assembly (clang, -O0):
<matrix_4x4_multiply_f_f_f>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x10(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x4(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x20(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x30(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x10(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x14(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x20(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x30(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x10(%rax)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x10(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x24(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x20(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x30(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x20(%rax)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x10(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x34(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x20(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x30(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x30(%rax)
mov    -0x8(%rbp),%rax
movss  0x4(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x14(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x4(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x24(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x34(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x4(%rax)
mov    -0x8(%rbp),%rax
movss  0x4(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x14(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x14(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x24(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x34(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x14(%rax)
mov    -0x8(%rbp),%rax
movss  0x4(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x14(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x24(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x24(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x34(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x24(%rax)
mov    -0x8(%rbp),%rax
movss  0x4(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x14(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x34(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x24(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x34(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x34(%rax)
mov    -0x8(%rbp),%rax
movss  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x18(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x4(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x28(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x38(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movss  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x18(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x14(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x28(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x38(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x18(%rax)
mov    -0x8(%rbp),%rax
movss  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x18(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x24(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x28(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x38(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x28(%rax)
mov    -0x8(%rbp),%rax
movss  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x18(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x34(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x28(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x38(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x38(%rax)
mov    -0x8(%rbp),%rax
movss  0xc(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x1c(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x4(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x2c(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x3c(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0xc(%rax)
mov    -0x8(%rbp),%rax
movss  0xc(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x1c(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x14(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x2c(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x3c(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x1c(%rax)
mov    -0x8(%rbp),%rax
movss  0xc(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x1c(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x24(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x2c(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x3c(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x2c(%rax)
mov    -0x8(%rbp),%rax
movss  0xc(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
mov    -0x8(%rbp),%rax
movss  0x1c(%rax),%xmm1
mov    -0x10(%rbp),%rax
mulss  0x34(%rax),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movss  0x2c(%rax),%xmm1
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movss  0x3c(%rax),%xmm0
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x3c(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<matrix_4x4_multiply_f_f_f>:
movups (%rdi),%xmm2
movups 0x10(%rdi),%xmm3
movups 0x20(%rdi),%xmm1
movups 0x30(%rdi),%xmm0
movss  (%rsi),%xmm4
movss  0x4(%rsi),%xmm5
shufps $0x0,%xmm5,%xmm5
mulps  %xmm3,%xmm5
shufps $0x0,%xmm4,%xmm4
mulps  %xmm2,%xmm4
addps  %xmm5,%xmm4
movss  0x8(%rsi),%xmm5
shufps $0x0,%xmm5,%xmm5
mulps  %xmm1,%xmm5
addps  %xmm4,%xmm5
movss  0xc(%rsi),%xmm4
shufps $0x0,%xmm4,%xmm4
mulps  %xmm0,%xmm4
addps  %xmm5,%xmm4
movss  0x14(%rsi),%xmm5
movups %xmm4,(%rdx)
movss  0x10(%rsi),%xmm4
shufps $0x0,%xmm5,%xmm5
mulps  %xmm3,%xmm5
shufps $0x0,%xmm4,%xmm4
mulps  %xmm2,%xmm4
addps  %xmm5,%xmm4
movss  0x18(%rsi),%xmm5
shufps $0x0,%xmm5,%xmm5
mulps  %xmm1,%xmm5
addps  %xmm4,%xmm5
movss  0x1c(%rsi),%xmm4
shufps $0x0,%xmm4,%xmm4
mulps  %xmm0,%xmm4
addps  %xmm5,%xmm4
movss  0x24(%rsi),%xmm5
movups %xmm4,0x10(%rdx)
movss  0x20(%rsi),%xmm4
shufps $0x0,%xmm5,%xmm5
mulps  %xmm3,%xmm5
shufps $0x0,%xmm4,%xmm4
mulps  %xmm2,%xmm4
addps  %xmm5,%xmm4
movss  0x28(%rsi),%xmm5
shufps $0x0,%xmm5,%xmm5
mulps  %xmm1,%xmm5
addps  %xmm4,%xmm5
movss  0x2c(%rsi),%xmm4
shufps $0x0,%xmm4,%xmm4
mulps  %xmm0,%xmm4
addps  %xmm5,%xmm4
movups %xmm4,0x20(%rdx)
movss  0x34(%rsi),%xmm4
shufps $0x0,%xmm4,%xmm4
mulps  %xmm3,%xmm4
movss  0x30(%rsi),%xmm3
shufps $0x0,%xmm3,%xmm3
mulps  %xmm2,%xmm3
addps  %xmm4,%xmm3
movss  0x38(%rsi),%xmm2
shufps $0x0,%xmm2,%xmm2
mulps  %xmm1,%xmm2
addps  %xmm3,%xmm2
movss  0x3c(%rsi),%xmm1
shufps $0x0,%xmm1,%xmm1
mulps  %xmm0,%xmm1
addps  %xmm2,%xmm1
movups %xmm1,0x30(%rdx)
ret

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

LLVM IR (-O2):
define void @matrix_4x4_multiply_f_f_f(float* noalias nocapture %0, float* noalias nocapture %1, float* noalias nocapture writeonly %2) {
%4 = load float, float* %1
%5 = getelementptr inbounds float, float* %0, i64 4
%6 = getelementptr inbounds float, float* %1, i64 1
%7 = load float, float* %6
%8 = getelementptr inbounds float, float* %0, i64 8
%9 = getelementptr inbounds float, float* %1, i64 2
%10 = load float, float* %9
%11 = getelementptr inbounds float, float* %0, i64 12
%12 = getelementptr inbounds float, float* %1, i64 3
%13 = load float, float* %12
%14 = getelementptr inbounds float, float* %1, i64 4
%15 = load float, float* %14
%16 = getelementptr inbounds float, float* %1, i64 5
%17 = load float, float* %16
%18 = bitcast float* %5 to <4 x float>*
%19 = load <4 x float>, <4 x float>* %18
%20 = bitcast float* %0 to <4 x float>*
%21 = load <4 x float>, <4 x float>* %20
%22 = getelementptr inbounds float, float* %1, i64 6
%23 = load float, float* %22
%24 = bitcast float* %8 to <4 x float>*
%25 = load <4 x float>, <4 x float>* %24
%26 = getelementptr inbounds float, float* %1, i64 7
%27 = load float, float* %26
%28 = bitcast float* %11 to <4 x float>*
%29 = load <4 x float>, <4 x float>* %28
%30 = getelementptr inbounds float, float* %2, i64 4
%31 = getelementptr inbounds float, float* %1, i64 8
%32 = load float, float* %31
%33 = getelementptr inbounds float, float* %1, i64 9
%34 = load float, float* %33
%35 = getelementptr inbounds float, float* %1, i64 10
%36 = load float, float* %35
%37 = getelementptr inbounds float, float* %1, i64 11
%38 = load float, float* %37
%39 = getelementptr inbounds float, float* %2, i64 8
%40 = getelementptr inbounds float, float* %1, i64 12
%41 = load float, float* %40
%42 = getelementptr inbounds float, float* %1, i64 13
%43 = load float, float* %42
%44 = getelementptr inbounds float, float* %1, i64 14
%45 = load float, float* %44
%46 = getelementptr inbounds float, float* %1, i64 15
%47 = load float, float* %46
%48 = getelementptr inbounds float, float* %2, i64 12
%49 = insertelement <4 x float> poison, float %7, i64 0
%50 = shufflevector <4 x float> %49, <4 x float> poison, <4 x i32> zeroinitializer
%51 = fmul <4 x float> %50, %19
%52 = insertelement <4 x float> poison, float %4, i64 0
%53 = shufflevector <4 x float> %52, <4 x float> poison, <4 x i32> zeroinitializer
%54 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %21, <4 x float> %53, <4 x float> %51)
%55 = insertelement <4 x float> poison, float %10, i64 0
%56 = shufflevector <4 x float> %55, <4 x float> poison, <4 x i32> zeroinitializer
%57 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %25, <4 x float> %56, <4 x float> %54)
%58 = insertelement <4 x float> poison, float %13, i64 0
%59 = shufflevector <4 x float> %58, <4 x float> poison, <4 x i32> zeroinitializer
%60 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %29, <4 x float> %59, <4 x float> %57)
%61 = bitcast float* %2 to <4 x float>*
store <4 x float> %60, <4 x float>* %61
%62 = insertelement <4 x float> poison, float %17, i64 0
%63 = shufflevector <4 x float> %62, <4 x float> poison, <4 x i32> zeroinitializer
%64 = fmul <4 x float> %19, %63
%65 = insertelement <4 x float> poison, float %15, i64 0
%66 = shufflevector <4 x float> %65, <4 x float> poison, <4 x i32> zeroinitializer
%67 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %21, <4 x float> %66, <4 x float> %64)
%68 = insertelement <4 x float> poison, float %23, i64 0
%69 = shufflevector <4 x float> %68, <4 x float> poison, <4 x i32> zeroinitializer
%70 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %25, <4 x float> %69, <4 x float> %67)
%71 = insertelement <4 x float> poison, float %27, i64 0
%72 = shufflevector <4 x float> %71, <4 x float> poison, <4 x i32> zeroinitializer
%73 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %29, <4 x float> %72, <4 x float> %70)
%74 = bitcast float* %30 to <4 x float>*
store <4 x float> %73, <4 x float>* %74
%75 = insertelement <4 x float> poison, float %34, i64 0
%76 = shufflevector <4 x float> %75, <4 x float> poison, <4 x i32> zeroinitializer
%77 = fmul <4 x float> %19, %76
%78 = insertelement <4 x float> poison, float %32, i64 0
%79 = shufflevector <4 x float> %78, <4 x float> poison, <4 x i32> zeroinitializer
%80 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %21, <4 x float> %79, <4 x float> %77)
%81 = insertelement <4 x float> poison, float %36, i64 0
%82 = shufflevector <4 x float> %81, <4 x float> poison, <4 x i32> zeroinitializer
%83 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %25, <4 x float> %82, <4 x float> %80)
%84 = insertelement <4 x float> poison, float %38, i64 0
%85 = shufflevector <4 x float> %84, <4 x float> poison, <4 x i32> zeroinitializer
%86 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %29, <4 x float> %85, <4 x float> %83)
%87 = bitcast float* %39 to <4 x float>*
store <4 x float> %86, <4 x float>* %87
%88 = insertelement <4 x float> poison, float %43, i64 0
%89 = shufflevector <4 x float> %88, <4 x float> poison, <4 x i32> zeroinitializer
%90 = fmul <4 x float> %19, %89
%91 = insertelement <4 x float> poison, float %41, i64 0
%92 = shufflevector <4 x float> %91, <4 x float> poison, <4 x i32> zeroinitializer
%93 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %21, <4 x float> %92, <4 x float> %90)
%94 = insertelement <4 x float> poison, float %45, i64 0
%95 = shufflevector <4 x float> %94, <4 x float> poison, <4 x i32> zeroinitializer
%96 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %25, <4 x float> %95, <4 x float> %93)
%97 = insertelement <4 x float> poison, float %47, i64 0
%98 = shufflevector <4 x float> %97, <4 x float> poison, <4 x i32> zeroinitializer
%99 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %29, <4 x float> %98, <4 x float> %96)
%100 = bitcast float* %48 to <4 x float>*
store <4 x float> %99, <4 x float>* %100
ret void
}