void matrix_ij_M(int n, double *mat, double ex, double ey, double ez, double xm,
                 double ym, double zm) {
  double mm1, mm2, mm3, mm4, mm5;
  double m1xxxx, m1xxxy, m1xxxz, m1xxyy, m1xxyz, m1xxzz;
  double m1xyyy, m1xyyz, m1xyzz, m1xzzz;
  double m1yyyy, m1yyyz, m1yyzz, m1yzzz, m1zzzz;
  double m2xx, m2xy, m2xz, m2yy, m2yz, m2zz;
  double m4xx, m4xy, m4xz, m4yy, m4yz, m4zz;
  double exx, eyy, ezz, exy, eyz, exz;
  double exxx, exxy, exxz, exyy, exyz, exzz, eyyy, eyyz, eyzz, ezzz;
  double exxxx, exxxy, exxxz, exxyy, exxyz, exxzz;
  double exyyy, exyyz, exyzz, exzzz;
  double eyyyy, eyyyz, eyyzz, eyzzz, ezzzz;
  mm1 = 1.5 * xm - 2.0 * ym + 0.5 * zm;
  mm2 = -0.5 * xm + 0.5 * zm;
  mm3 = 1.0 / 6.0 * xm - 0.5 * zm;
  mm4 = 0.5 * ym - 0.5 * zm;
  mm5 = 0.5 * zm;
  exx = ex * ex;
  eyy = ey * ey;
  ezz = ez * ez;
  exy = ex * ey;
  eyz = ey * ez;
  exz = ez * ex;
  exxx = exx * ex;
  exxy = exx * ey;
  exxz = exx * ez;
  exyy = exy * ey;
  exyz = exy * ez;
  exzz = exz * ez;
  eyyy = eyy * ey;
  eyyz = eyy * ez;
  eyzz = eyz * ez;
  ezzz = ezz * ez;
  exxxx = exx * exx;
  exxxy = exx * exy;
  exxxz = exx * exz;
  exxyy = exx * eyy;
  exxyz = exx * eyz;
  exxzz = exx * ezz;
  exyyy = exy * eyy;
  exyyz = exy * eyz;
  exyzz = exy * ezz;
  exzzz = exz * ezz;
  eyyyy = eyy * eyy;
  eyyyz = eyy * eyz;
  eyyzz = eyy * ezz;
  eyzzz = eyz * ezz;
  ezzzz = ezz * ezz;
  m1xxxx = mm1 * exxxx;
  m1xxxy = mm1 * exxxy;
  m1xxxz = mm1 * exxxz;
  m1xxyy = mm1 * exxyy;
  m1xxyz = mm1 * exxyz;
  m1xxzz = mm1 * exxzz;
  m1xyyy = mm1 * exyyy;
  m1xyyz = mm1 * exyyz;
  m1xyzz = mm1 * exyzz;
  m1xzzz = mm1 * exzzz;
  m1yyyy = mm1 * eyyyy;
  m1yyyz = mm1 * eyyyz;
  m1yyzz = mm1 * eyyzz;
  m1yzzz = mm1 * eyzzz;
  m1zzzz = mm1 * ezzzz;
  m2xx = mm2 * exx;
  m2xy = mm2 * exy;
  m2xz = mm2 * exz;
  m2yy = mm2 * eyy;
  m2yz = mm2 * eyz;
  m2zz = mm2 * ezz;
  m4xx = mm4 * exx;
  m4xy = mm4 * exy;
  m4xz = mm4 * exz;
  m4yy = mm4 * eyy;
  m4yz = mm4 * eyz;
  m4zz = mm4 * ezz;
  mat[0 * n + 0] += m1xxxx;
  mat[0 * n + 1] += m1xxxy;
  mat[0 * n + 2] += m1xxxz;
  mat[0 * n + 3] += m1xxyz;
  mat[0 * n + 4] += m1xxyy;
  mat[1 * n + 0] += m1xxxy;
  mat[1 * n + 1] += m1xxyy;
  mat[1 * n + 2] += m1xxyz;
  mat[1 * n + 3] += m1xyyz;
  mat[1 * n + 4] += m1xyyy;
  mat[2 * n + 0] += m1xxxz;
  mat[2 * n + 1] += m1xxyz;
  mat[2 * n + 2] += m1xxzz;
  mat[2 * n + 3] += m1xyzz;
  mat[2 * n + 4] += m1xyyz;
  mat[3 * n + 0] += m1xxyz;
  mat[3 * n + 1] += m1xyyz;
  mat[3 * n + 2] += m1xyzz;
  mat[3 * n + 3] += m1yyzz;
  mat[3 * n + 4] += m1yyyz;
  mat[4 * n + 0] += m1xxyy;
  mat[4 * n + 1] += m1xyyy;
  mat[4 * n + 2] += m1xyyz;
  mat[4 * n + 3] += m1yyyz;
  mat[4 * n + 4] += m1yyyy;
  mat[0 * n + 0] += 2.0 * m2xx;
  mat[0 * n + 1] += m2xy;
  mat[0 * n + 2] += m2xz;
  mat[0 * n + 3] += m2yz;
  mat[0 * n + 4] += m2yy + m2xx;
  mat[1 * n + 0] += m2xy;
  mat[1 * n + 4] += m2xy;
  mat[2 * n + 0] += m2xz;
  mat[2 * n + 4] += m2xz;
  mat[3 * n + 0] += m2yz;
  mat[3 * n + 4] += m2yz;
  mat[4 * n + 0] += m2xx + m2yy;
  mat[4 * n + 1] += m2xy;
  mat[4 * n + 2] += m2xz;
  mat[4 * n + 3] += m2yz;
  mat[4 * n + 4] += 2.0 * m2yy;
  mat[0 * n + 0] += mm3;
  mat[0 * n + 4] += mm3;
  mat[4 * n + 0] += mm3;
  mat[4 * n + 4] += mm3;
  mat[0 * n + 0] += 4.0 * m4xx;
  mat[0 * n + 1] += 2.0 * m4xy;
  mat[0 * n + 2] += 2.0 * m4xz;
  mat[1 * n + 0] += 2.0 * m4xy;
  mat[1 * n + 1] += m4xx + m4yy;
  mat[1 * n + 2] += m4yz;
  mat[1 * n + 3] += m4xz;
  mat[1 * n + 4] += 2.0 * m4xy;
  mat[2 * n + 0] += 2.0 * m4xz;
  mat[2 * n + 1] += m4yz;
  mat[2 * n + 2] += m4xx + m4zz;
  mat[2 * n + 3] += m4xy;
  mat[3 * n + 1] += m4xz;
  mat[3 * n + 2] += m4xy;
  mat[3 * n + 3] += m4yy + m4zz;
  mat[3 * n + 4] += 2.0 * m4yz;
  mat[4 * n + 1] += 2.0 * m4xy;
  mat[4 * n + 3] += 2.0 * m4yz;
  mat[4 * n + 4] += 4.0 * m4yy;
  mat[0 * n + 0] += 2.0 * mm5;
  mat[1 * n + 1] += mm5;
  mat[2 * n + 2] += mm5;
  mat[3 * n + 3] += mm5;
  mat[4 * n + 4] += 2.0 * mm5;
}


x86 assembly (clang, -O0):
<matrix_ij_M>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1b8,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
movsd  %xmm2,-0x28(%rbp)
movsd  %xmm3,-0x30(%rbp)
movsd  %xmm4,-0x38(%rbp)
movsd  %xmm5,-0x40(%rbp)
movsd  -0x30(%rbp),%xmm1
movsd  0x1eeb(%rip),%xmm0
mulsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0x1ebf(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  0x1e92(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0x1e78(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
movsd  0x1e7b(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0x1e51(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0x1e35(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  0x1e13(%rip),%xmm1
mulsd  -0x40(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0x1def(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0x1dda(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mulsd  -0x148(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mulsd  -0x160(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mulsd  -0x170(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d8(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mulsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0x1e0(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mulsd  -0x168(%rbp),%xmm0
ff
movsd  %xmm0,-0x1e8(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mulsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x1f0(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
mulsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0x1f8(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
mulsd  -0x168(%rbp),%xmm0
ff
movsd  %xmm0,-0x200(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
mulsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x208(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
mulsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x210(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
mulsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0x218(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
mulsd  -0x168(%rbp),%xmm0
ff
movsd  %xmm0,-0x220(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
mulsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x228(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
mulsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x230(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
mulsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x238(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x1c8(%rbp),%xmm0
ff
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x1d0(%rbp),%xmm0
ff
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x1d8(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x1e0(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x1e8(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x1f0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x1f8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x200(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x208(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x210(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x218(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x220(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x228(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x230(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x238(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x148(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x160(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x170(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x168(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
mulsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mulsd  -0x148(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mulsd  -0x160(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mulsd  -0x170(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mulsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mulsd  -0x168(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
mulsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x78(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x78(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xe8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xf0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xf8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x108(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x100(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xf0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xf0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xf8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xf8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x108(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x108(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xe8(%rbp),%xmm0
ff
addsd  -0x100(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xf0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xf8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x108(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x100(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x118(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  0x12f8(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x120(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x128(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x120(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x118(%rbp),%xmm0
ff
addsd  -0x130(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x138(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x128(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x120(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x128(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x138(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x118(%rbp),%xmm0
ff
addsd  -0x140(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x120(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x128(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x120(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x130(%rbp),%xmm0
ff
addsd  -0x140(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x138(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x120(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x138(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x130(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  0x1038(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x0,-0x4(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x0,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
imul   $0x3,-0x4(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
add    $0x1b8,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<matrix_ij_M>:
movapd %xmm4,%xmm9
movapd %xmm3,-0x18(%rsp)
movapd %xmm1,%xmm10
addsd  %xmm4,%xmm4
movsd  0xee4(%rip),%xmm1
mulsd  %xmm3,%xmm1
subsd  %xmm4,%xmm1
mulsd  0xedc(%rip),%xmm5
movsd  %xmm5,-0x50(%rsp)
addsd  %xmm5,%xmm1
movsd  0xed1(%rip),%xmm14
mulsd  %xmm3,%xmm14
addsd  %xmm5,%xmm14
movapd %xmm2,%xmm3
mulsd  %xmm2,%xmm3
movapd %xmm0,%xmm5
unpcklpd %xmm0,%xmm5
unpcklpd %xmm10,%xmm0
mulsd  %xmm10,%xmm10
mulpd  %xmm0,%xmm5
unpcklpd %xmm2,%xmm2
mulpd  %xmm0,%xmm2
movapd %xmm5,%xmm15
unpcklpd %xmm5,%xmm15
movapd %xmm15,%xmm6
mulpd  %xmm5,%xmm6
mulpd  %xmm2,%xmm15
movapd %xmm10,%xmm11
unpcklpd %xmm10,%xmm11
mulpd  %xmm5,%xmm11
movapd %xmm5,%xmm0
unpckhpd %xmm5,%xmm0
movapd %xmm0,%xmm4
movapd %xmm3,%xmm7
movapd %xmm3,%xmm0
movapd %xmm3,-0x38(%rsp)
unpcklpd %xmm3,%xmm7
mulpd  %xmm5,%xmm7
movapd %xmm5,%xmm8
mulsd  %xmm14,%xmm8
mulsd  %xmm14,%xmm4
movapd %xmm4,-0x48(%rsp)
movapd %xmm10,%xmm12
mulsd  %xmm14,%xmm12
unpcklpd %xmm14,%xmm14
mulpd  %xmm2,%xmm14
movapd %xmm5,%xmm13
movapd %xmm5,-0x28(%rsp)
shufpd $0x1,%xmm2,%xmm5
unpckhpd %xmm2,%xmm2
movapd %xmm10,%xmm3
mulsd  %xmm10,%xmm3
shufpd $0x1,%xmm10,%xmm13
mulpd  %xmm2,%xmm13
movapd %xmm10,%xmm4
mulsd  %xmm0,%xmm4
mulsd  %xmm1,%xmm3
mulsd  %xmm1,%xmm4
movapd %xmm1,%xmm0
unpcklpd %xmm1,%xmm0
mulpd  %xmm0,%xmm6
mulpd  %xmm0,%xmm15
mulpd  %xmm0,%xmm11
mulpd  %xmm0,%xmm7
mulpd  %xmm13,%xmm0
movupd (%rsi),%xmm13
addpd  %xmm6,%xmm13
movupd 0x10(%rsi),%xmm1
movupd %xmm13,(%rsi)
addpd  %xmm15,%xmm1
movupd %xmm1,0x10(%rsi)
movsd  0x20(%rsi),%xmm1
addsd  %xmm11,%xmm1
movsd  %xmm1,0x20(%rsi)
movslq %edi,%rax
unpckhpd %xmm6,%xmm6
addsd  (%rsi,%rax,8),%xmm6
movsd  %xmm6,(%rsi,%rax,8)
movsd  0x8(%rsi,%rax,8),%xmm1
addsd  %xmm11,%xmm1
movsd  %xmm1,0x8(%rsi,%rax,8)
movapd %xmm15,%xmm13
unpckhpd %xmm15,%xmm13
movsd  0x10(%rsi,%rax,8),%xmm6
addsd  %xmm13,%xmm6
movsd  %xmm6,0x10(%rsi,%rax,8)
movsd  0x18(%rsi,%rax,8),%xmm6
addsd  %xmm0,%xmm6
movsd  %xmm6,0x18(%rsi,%rax,8)
movapd %xmm11,%xmm6
unpckhpd %xmm11,%xmm6
addsd  0x20(%rsi,%rax,8),%xmm6
movsd  %xmm6,0x20(%rsi,%rax,8)
lea    (%rax,%rax,1),%ecx
movslq %ecx,%r9
movupd (%rsi,%r9,8),%xmm6
addpd  %xmm15,%xmm6
movupd 0x10(%rsi,%r9,8),%xmm1
movupd %xmm6,(%rsi,%r9,8)
addpd  %xmm7,%xmm1
movupd %xmm1,0x10(%rsi,%r9,8)
movsd  0x20(%rsi,%r9,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x20(%rsi,%r9,8)
lea    (%rax,%rax,2),%edx
movslq %edx,%rdx
addsd  (%rsi,%rdx,8),%xmm13
mulsd  0xcee(%rip),%xmm9
movsd  %xmm13,(%rsi,%rdx,8)
movsd  0x8(%rsi,%rdx,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsi,%rdx,8)
unpckhpd %xmm7,%xmm7
addsd  0x10(%rsi,%rdx,8),%xmm7
movsd  %xmm7,0x10(%rsi,%rdx,8)
addsd  0x18(%rsi,%rdx,8),%xmm4
movsd  %xmm4,0x18(%rsi,%rdx,8)
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  0x20(%rsi,%rdx,8),%xmm1
movsd  %xmm1,0x20(%rsi,%rdx,8)
lea    0x0(,%rax,4),%edi
movslq %edi,%rdi
movupd (%rsi,%rdi,8),%xmm1
addpd  %xmm11,%xmm1
movupd %xmm1,(%rsi,%rdi,8)
lea    0x2(,%rax,4),%ecx
movslq %ecx,%r8
movupd (%rsi,%r8,8),%xmm1
addpd  %xmm0,%xmm1
movupd %xmm1,(%rsi,%r8,8)
addsd  0x20(%rsi,%rdi,8),%xmm3
movsd  %xmm3,0x20(%rsi,%rdi,8)
movapd %xmm8,%xmm0
addsd  %xmm8,%xmm0
addsd  (%rsi),%xmm0
movsd  %xmm0,(%rsi)
movupd 0x8(%rsi),%xmm0
movapd -0x48(%rsp),%xmm3
movapd %xmm3,%xmm1
unpcklpd %xmm14,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm1,0x8(%rsi)
movapd %xmm14,%xmm0
unpckhpd %xmm14,%xmm0
movsd  0x18(%rsi),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsi)
addsd  %xmm12,%xmm8
movsd  0x20(%rsi),%xmm1
addsd  %xmm8,%xmm1
movsd  %xmm1,0x20(%rsi)
movsd  (%rsi,%rax,8),%xmm1
addsd  %xmm3,%xmm1
movsd  %xmm1,(%rsi,%rax,8)
movsd  0x20(%rsi,%rax,8),%xmm1
addsd  %xmm3,%xmm1
movapd %xmm3,%xmm4
movsd  %xmm1,0x20(%rsi,%rax,8)
movsd  (%rsi,%r9,8),%xmm1
addsd  %xmm14,%xmm1
movsd  %xmm1,(%rsi,%r9,8)
movsd  0x20(%rsi,%r9,8),%xmm1
addsd  %xmm14,%xmm1
movsd  %xmm1,0x20(%rsi,%r9,8)
movsd  (%rsi,%rdx,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsi,%rdx,8)
movsd  -0x50(%rsp),%xmm1
subsd  %xmm1,%xmm9
movapd -0x28(%rsp),%xmm7
mulsd  %xmm9,%xmm7
mulsd  %xmm9,%xmm10
mulsd  %xmm9,%xmm2
movapd -0x38(%rsp),%xmm6
mulsd  %xmm9,%xmm6
unpcklpd %xmm9,%xmm9
addsd  0x20(%rsi,%rdx,8),%xmm0
mulpd  %xmm5,%xmm9
movsd  %xmm0,0x20(%rsi,%rdx,8)
movapd -0x18(%rsp),%xmm3
mulsd  0xb7b(%rip),%xmm3
addsd  (%rsi,%rdi,8),%xmm8
movsd  %xmm8,(%rsi,%rdi,8)
movupd (%rsi,%r8,8),%xmm0
addpd  %xmm14,%xmm0
subsd  %xmm1,%xmm3
movapd %xmm1,%xmm5
lea    0x1(%rax,%rax,1),%ecx
movupd %xmm0,(%rsi,%r8,8)
addsd  %xmm12,%xmm12
addsd  0x20(%rsi,%rdi,8),%xmm12
movsd  %xmm12,0x20(%rsi,%rdi,8)
movsd  (%rsi),%xmm0
addsd  %xmm3,%xmm0
movsd  %xmm0,(%rsi)
movsd  0x20(%rsi),%xmm0
addsd  %xmm3,%xmm0
movsd  %xmm0,0x20(%rsi)
movupd (%rsi,%rdi,8),%xmm0
movapd %xmm3,%xmm1
unpcklpd %xmm4,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm1,(%rsi,%rdi,8)
addsd  0x20(%rsi,%rdi,8),%xmm3
movslq %ecx,%r8
movsd  %xmm3,0x20(%rsi,%rdi,8)
movsd  0xb00(%rip),%xmm0
movapd %xmm7,%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rsi),%xmm1
movsd  %xmm1,(%rsi)
movupd 0x8(%rsi),%xmm1
movapd %xmm9,%xmm3
addpd  %xmm9,%xmm3
addpd  %xmm1,%xmm3
movupd %xmm3,0x8(%rsi)
movapd %xmm9,%xmm1
addsd  %xmm9,%xmm1
movsd  (%rsi,%rax,8),%xmm3
addsd  %xmm1,%xmm3
movsd  %xmm3,(%rsi,%rax,8)
movapd %xmm7,%xmm3
addsd  %xmm10,%xmm3
addsd  0x8(%rsi,%rax,8),%xmm3
movsd  %xmm3,0x8(%rsi,%rax,8)
movsd  0x10(%rsi,%rax,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,0x10(%rsi,%rax,8)
movapd %xmm9,%xmm3
unpckhpd %xmm9,%xmm3
movsd  0x18(%rsi,%rax,8),%xmm4
addsd  %xmm3,%xmm4
movsd  %xmm4,0x18(%rsi,%rax,8)
movsd  0x20(%rsi,%rax,8),%xmm4
addsd  %xmm1,%xmm4
movsd  %xmm4,0x20(%rsi,%rax,8)
movapd %xmm3,%xmm4
addsd  %xmm3,%xmm4
addsd  (%rsi,%r9,8),%xmm4
movsd  %xmm4,(%rsi,%r9,8)
movsd  (%rsi,%r8,8),%xmm4
addsd  %xmm2,%xmm4
movsd  %xmm4,(%rsi,%r8,8)
movapd %xmm7,%xmm4
addsd  %xmm6,%xmm4
addsd  0x10(%rsi,%r9,8),%xmm4
movsd  %xmm4,0x10(%rsi,%r9,8)
movsd  0x18(%rsi,%r9,8),%xmm4
addsd  %xmm9,%xmm4
movsd  %xmm4,0x18(%rsi,%r9,8)
movsd  0x8(%rsi,%rdx,8),%xmm4
addsd  %xmm3,%xmm4
movsd  %xmm4,0x8(%rsi,%rdx,8)
movsd  0x10(%rsi,%rdx,8),%xmm3
addsd  %xmm9,%xmm3
movsd  %xmm3,0x10(%rsi,%rdx,8)
movapd %xmm6,%xmm3
addsd  %xmm10,%xmm3
addsd  0x18(%rsi,%rdx,8),%xmm3
movsd  %xmm3,0x18(%rsi,%rdx,8)
addsd  %xmm2,%xmm2
movsd  0x20(%rsi,%rdx,8),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,0x20(%rsi,%rdx,8)
lea    0x1(,%rax,4),%ecx
movslq %ecx,%rcx
addsd  (%rsi,%rcx,8),%xmm1
movsd  %xmm1,(%rsi,%rcx,8)
lea    0x3(,%rax,4),%ecx
movslq %ecx,%rcx
addsd  (%rsi,%rcx,8),%xmm2
movsd  %xmm2,(%rsi,%rcx,8)
mulsd  %xmm0,%xmm10
addsd  0x20(%rsi,%rdi,8),%xmm10
movsd  %xmm10,0x20(%rsi,%rdi,8)
movapd %xmm5,%xmm2
movapd %xmm5,%xmm0
addsd  %xmm5,%xmm0
movsd  (%rsi),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsi)
movsd  0x8(%rsi,%rax,8),%xmm1
addsd  %xmm5,%xmm1
movsd  %xmm1,0x8(%rsi,%rax,8)
movsd  0x10(%rsi,%r9,8),%xmm1
addsd  %xmm5,%xmm1
movsd  %xmm1,0x10(%rsi,%r9,8)
addsd  0x18(%rsi,%rdx,8),%xmm2
movsd  %xmm2,0x18(%rsi,%rdx,8)
addsd  0x20(%rsi,%rdi,8),%xmm0
movsd  %xmm0,0x20(%rsi,%rdi,8)
ret

LLVM IR (-O0):
define void @matrix_ij_M(i32 %0, double* %1, double %2, double %3, double %4, double %5, double %6, double %7) {
%9 = alloca i32
%10 = alloca double*
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca double
%46 = alloca double
%47 = alloca double
%48 = alloca double
%49 = alloca double
%50 = alloca double
%51 = alloca double
%52 = alloca double
%53 = alloca double
%54 = alloca double
%55 = alloca double
%56 = alloca double
%57 = alloca double
%58 = alloca double
%59 = alloca double
%60 = alloca double
%61 = alloca double
%62 = alloca double
%63 = alloca double
%64 = alloca double
%65 = alloca double
%66 = alloca double
%67 = alloca double
%68 = alloca double
%69 = alloca double
%70 = alloca double
%71 = alloca double
%72 = alloca double
%73 = alloca double
%74 = alloca double
%75 = alloca double
%76 = alloca double
%77 = alloca double
%78 = alloca double
%79 = alloca double
store i32 %0, i32* %9
store double* %1, double** %10
store double %2, double* %11
store double %3, double* %12
store double %4, double* %13
store double %5, double* %14
store double %6, double* %15
store double %7, double* %16
%80 = load double, double* %14
%81 = load double, double* %15
%82 = fmul double 2.000000e+00, %81
%83 = fneg double %82
%84 = call double @llvm.fmuladd.f64(double 1.500000e+00, double %80, double %83)
%85 = load double, double* %16
%86 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %85, double %84)
store double %86, double* %17
%87 = load double, double* %14
%88 = load double, double* %16
%89 = fmul double 5.000000e-01, %88
%90 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %87, double %89)
store double %90, double* %18
%91 = load double, double* %14
%92 = load double, double* %16
%93 = fmul double 5.000000e-01, %92
%94 = fneg double %93
%95 = call double @llvm.fmuladd.f64(double 0x3FC5555555555555, double %91, double %94)
store double %95, double* %19
%96 = load double, double* %15
%97 = load double, double* %16
%98 = fmul double 5.000000e-01, %97
%99 = fneg double %98
%100 = call double @llvm.fmuladd.f64(double 5.000000e-01, double %96, double %99)
store double %100, double* %20
%101 = load double, double* %16
%102 = fmul double 5.000000e-01, %101
store double %102, double* %21
%103 = load double, double* %11
%104 = load double, double* %11
%105 = fmul double %103, %104
store double %105, double* %49
%106 = load double, double* %12
%107 = load double, double* %12
%108 = fmul double %106, %107
store double %108, double* %50
%109 = load double, double* %13
%110 = load double, double* %13
%111 = fmul double %109, %110
store double %111, double* %51
%112 = load double, double* %11
%113 = load double, double* %12
%114 = fmul double %112, %113
store double %114, double* %52
%115 = load double, double* %12
%116 = load double, double* %13
%117 = fmul double %115, %116
store double %117, double* %53
%118 = load double, double* %13
%119 = load double, double* %11
%120 = fmul double %118, %119
store double %120, double* %54
%121 = load double, double* %49
%122 = load double, double* %11
%123 = fmul double %121, %122
store double %123, double* %55
%124 = load double, double* %49
%125 = load double, double* %12
%126 = fmul double %124, %125
store double %126, double* %56
%127 = load double, double* %49
%128 = load double, double* %13
%129 = fmul double %127, %128
store double %129, double* %57
%130 = load double, double* %52
%131 = load double, double* %12
%132 = fmul double %130, %131
store double %132, double* %58
%133 = load double, double* %52
%134 = load double, double* %13
%135 = fmul double %133, %134
store double %135, double* %59
%136 = load double, double* %54
%137 = load double, double* %13
%138 = fmul double %136, %137
store double %138, double* %60
%139 = load double, double* %50
%140 = load double, double* %12
%141 = fmul double %139, %140
store double %141, double* %61
%142 = load double, double* %50
%143 = load double, double* %13
%144 = fmul double %142, %143
store double %144, double* %62
%145 = load double, double* %53
%146 = load double, double* %13
%147 = fmul double %145, %146
store double %147, double* %63
%148 = load double, double* %51
%149 = load double, double* %13
%150 = fmul double %148, %149
store double %150, double* %64
%151 = load double, double* %49
%152 = load double, double* %49
%153 = fmul double %151, %152
store double %153, double* %65
%154 = load double, double* %49
%155 = load double, double* %52
%156 = fmul double %154, %155
store double %156, double* %66
%157 = load double, double* %49
%158 = load double, double* %54
%159 = fmul double %157, %158
store double %159, double* %67
%160 = load double, double* %49
%161 = load double, double* %50
%162 = fmul double %160, %161
store double %162, double* %68
%163 = load double, double* %49
%164 = load double, double* %53
%165 = fmul double %163, %164
store double %165, double* %69
%166 = load double, double* %49
%167 = load double, double* %51
%168 = fmul double %166, %167
store double %168, double* %70
%169 = load double, double* %52
%170 = load double, double* %50
%171 = fmul double %169, %170
store double %171, double* %71
%172 = load double, double* %52
%173 = load double, double* %53
%174 = fmul double %172, %173
store double %174, double* %72
%175 = load double, double* %52
%176 = load double, double* %51
%177 = fmul double %175, %176
store double %177, double* %73
%178 = load double, double* %54
%179 = load double, double* %51
%180 = fmul double %178, %179
store double %180, double* %74
%181 = load double, double* %50
%182 = load double, double* %50
%183 = fmul double %181, %182
store double %183, double* %75
%184 = load double, double* %50
%185 = load double, double* %53
%186 = fmul double %184, %185
store double %186, double* %76
%187 = load double, double* %50
%188 = load double, double* %51
%189 = fmul double %187, %188
store double %189, double* %77
%190 = load double, double* %53
%191 = load double, double* %51
%192 = fmul double %190, %191
store double %192, double* %78
%193 = load double, double* %51
%194 = load double, double* %51
%195 = fmul double %193, %194
store double %195, double* %79
%196 = load double, double* %17
%197 = load double, double* %65
%198 = fmul double %196, %197
store double %198, double* %22
%199 = load double, double* %17
%200 = load double, double* %66
%201 = fmul double %199, %200
store double %201, double* %23
%202 = load double, double* %17
%203 = load double, double* %67
%204 = fmul double %202, %203
store double %204, double* %24
%205 = load double, double* %17
%206 = load double, double* %68
%207 = fmul double %205, %206
store double %207, double* %25
%208 = load double, double* %17
%209 = load double, double* %69
%210 = fmul double %208, %209
store double %210, double* %26
%211 = load double, double* %17
%212 = load double, double* %70
%213 = fmul double %211, %212
store double %213, double* %27
%214 = load double, double* %17
%215 = load double, double* %71
%216 = fmul double %214, %215
store double %216, double* %28
%217 = load double, double* %17
%218 = load double, double* %72
%219 = fmul double %217, %218
store double %219, double* %29
%220 = load double, double* %17
%221 = load double, double* %73
%222 = fmul double %220, %221
store double %222, double* %30
%223 = load double, double* %17
%224 = load double, double* %74
%225 = fmul double %223, %224
store double %225, double* %31
%226 = load double, double* %17
%227 = load double, double* %75
%228 = fmul double %226, %227
store double %228, double* %32
%229 = load double, double* %17
%230 = load double, double* %76
%231 = fmul double %229, %230
store double %231, double* %33
%232 = load double, double* %17
%233 = load double, double* %77
%234 = fmul double %232, %233
store double %234, double* %34
%235 = load double, double* %17
%236 = load double, double* %78
%237 = fmul double %235, %236
store double %237, double* %35
%238 = load double, double* %17
%239 = load double, double* %79
%240 = fmul double %238, %239
store double %240, double* %36
%241 = load double, double* %18
%242 = load double, double* %49
%243 = fmul double %241, %242
store double %243, double* %37
%244 = load double, double* %18
%245 = load double, double* %52
%246 = fmul double %244, %245
store double %246, double* %38
%247 = load double, double* %18
%248 = load double, double* %54
%249 = fmul double %247, %248
store double %249, double* %39
%250 = load double, double* %18
%251 = load double, double* %50
%252 = fmul double %250, %251
store double %252, double* %40
%253 = load double, double* %18
%254 = load double, double* %53
%255 = fmul double %253, %254
store double %255, double* %41
%256 = load double, double* %18
%257 = load double, double* %51
%258 = fmul double %256, %257
store double %258, double* %42
%259 = load double, double* %20
%260 = load double, double* %49
%261 = fmul double %259, %260
store double %261, double* %43
%262 = load double, double* %20
%263 = load double, double* %52
%264 = fmul double %262, %263
store double %264, double* %44
%265 = load double, double* %20
%266 = load double, double* %54
%267 = fmul double %265, %266
store double %267, double* %45
%268 = load double, double* %20
%269 = load double, double* %50
%270 = fmul double %268, %269
store double %270, double* %46
%271 = load double, double* %20
%272 = load double, double* %53
%273 = fmul double %271, %272
store double %273, double* %47
%274 = load double, double* %20
%275 = load double, double* %51
%276 = fmul double %274, %275
store double %276, double* %48
%277 = load double, double* %22
%278 = load double*, double** %10
%279 = load i32, i32* %9
%280 = mul nsw i32 0, %279
%281 = add nsw i32 %280, 0
%282 = sext i32 %281 to i64
%283 = getelementptr inbounds double, double* %278, i64 %282
%284 = load double, double* %283
%285 = fadd double %284, %277
store double %285, double* %283
%286 = load double, double* %23
%287 = load double*, double** %10
%288 = load i32, i32* %9
%289 = mul nsw i32 0, %288
%290 = add nsw i32 %289, 1
%291 = sext i32 %290 to i64
%292 = getelementptr inbounds double, double* %287, i64 %291
%293 = load double, double* %292
%294 = fadd double %293, %286
store double %294, double* %292
%295 = load double, double* %24
%296 = load double*, double** %10
%297 = load i32, i32* %9
%298 = mul nsw i32 0, %297
%299 = add nsw i32 %298, 2
%300 = sext i32 %299 to i64
%301 = getelementptr inbounds double, double* %296, i64 %300
%302 = load double, double* %301
%303 = fadd double %302, %295
store double %303, double* %301
%304 = load double, double* %26
%305 = load double*, double** %10
%306 = load i32, i32* %9
%307 = mul nsw i32 0, %306
%308 = add nsw i32 %307, 3
%309 = sext i32 %308 to i64
%310 = getelementptr inbounds double, double* %305, i64 %309
%311 = load double, double* %310
%312 = fadd double %311, %304
store double %312, double* %310
%313 = load double, double* %25
%314 = load double*, double** %10
%315 = load i32, i32* %9
%316 = mul nsw i32 0, %315
%317 = add nsw i32 %316, 4
%318 = sext i32 %317 to i64
%319 = getelementptr inbounds double, double* %314, i64 %318
%320 = load double, double* %319
%321 = fadd double %320, %313
store double %321, double* %319
%322 = load double, double* %23
%323 = load double*, double** %10
%324 = load i32, i32* %9
%325 = mul nsw i32 1, %324
%326 = add nsw i32 %325, 0
%327 = sext i32 %326 to i64
%328 = getelementptr inbounds double, double* %323, i64 %327
%329 = load double, double* %328
%330 = fadd double %329, %322
store double %330, double* %328
%331 = load double, double* %25
%332 = load double*, double** %10
%333 = load i32, i32* %9
%334 = mul nsw i32 1, %333
%335 = add nsw i32 %334, 1
%336 = sext i32 %335 to i64
%337 = getelementptr inbounds double, double* %332, i64 %336
%338 = load double, double* %337
%339 = fadd double %338, %331
store double %339, double* %337
%340 = load double, double* %26
%341 = load double*, double** %10
%342 = load i32, i32* %9
%343 = mul nsw i32 1, %342
%344 = add nsw i32 %343, 2
%345 = sext i32 %344 to i64
%346 = getelementptr inbounds double, double* %341, i64 %345
%347 = load double, double* %346
%348 = fadd double %347, %340
store double %348, double* %346
%349 = load double, double* %29
%350 = load double*, double** %10
%351 = load i32, i32* %9
%352 = mul nsw i32 1, %351
%353 = add nsw i32 %352, 3
%354 = sext i32 %353 to i64
%355 = getelementptr inbounds double, double* %350, i64 %354
%356 = load double, double* %355
%357 = fadd double %356, %349
store double %357, double* %355
%358 = load double, double* %28
%359 = load double*, double** %10
%360 = load i32, i32* %9
%361 = mul nsw i32 1, %360
%362 = add nsw i32 %361, 4
%363 = sext i32 %362 to i64
%364 = getelementptr inbounds double, double* %359, i64 %363
%365 = load double, double* %364
%366 = fadd double %365, %358
store double %366, double* %364
%367 = load double, double* %24
%368 = load double*, double** %10
%369 = load i32, i32* %9
%370 = mul nsw i32 2, %369
%371 = add nsw i32 %370, 0
%372 = sext i32 %371 to i64
%373 = getelementptr inbounds double, double* %368, i64 %372
%374 = load double, double* %373
%375 = fadd double %374, %367
store double %375, double* %373
%376 = load double, double* %26
%377 = load double*, double** %10
%378 = load i32, i32* %9
%379 = mul nsw i32 2, %378
%380 = add nsw i32 %379, 1
%381 = sext i32 %380 to i64
%382 = getelementptr inbounds double, double* %377, i64 %381
%383 = load double, double* %382
%384 = fadd double %383, %376
store double %384, double* %382
%385 = load double, double* %27
%386 = load double*, double** %10
%387 = load i32, i32* %9
%388 = mul nsw i32 2, %387
%389 = add nsw i32 %388, 2
%390 = sext i32 %389 to i64
%391 = getelementptr inbounds double, double* %386, i64 %390
%392 = load double, double* %391
%393 = fadd double %392, %385
store double %393, double* %391
%394 = load double, double* %30
%395 = load double*, double** %10
%396 = load i32, i32* %9
%397 = mul nsw i32 2, %396
%398 = add nsw i32 %397, 3
%399 = sext i32 %398 to i64
%400 = getelementptr inbounds double, double* %395, i64 %399
%401 = load double, double* %400
%402 = fadd double %401, %394
store double %402, double* %400
%403 = load double, double* %29
%404 = load double*, double** %10
%405 = load i32, i32* %9
%406 = mul nsw i32 2, %405
%407 = add nsw i32 %406, 4
%408 = sext i32 %407 to i64
%409 = getelementptr inbounds double, double* %404, i64 %408
%410 = load double, double* %409
%411 = fadd double %410, %403
store double %411, double* %409
%412 = load double, double* %26
%413 = load double*, double** %10
%414 = load i32, i32* %9
%415 = mul nsw i32 3, %414
%416 = add nsw i32 %415, 0
%417 = sext i32 %416 to i64
%418 = getelementptr inbounds double, double* %413, i64 %417
%419 = load double, double* %418
%420 = fadd double %419, %412
store double %420, double* %418
%421 = load double, double* %29
%422 = load double*, double** %10
%423 = load i32, i32* %9
%424 = mul nsw i32 3, %423
%425 = add nsw i32 %424, 1
%426 = sext i32 %425 to i64
%427 = getelementptr inbounds double, double* %422, i64 %426
%428 = load double, double* %427
%429 = fadd double %428, %421
store double %429, double* %427
%430 = load double, double* %30
%431 = load double*, double** %10
%432 = load i32, i32* %9
%433 = mul nsw i32 3, %432
%434 = add nsw i32 %433, 2
%435 = sext i32 %434 to i64
%436 = getelementptr inbounds double, double* %431, i64 %435
%437 = load double, double* %436
%438 = fadd double %437, %430
store double %438, double* %436
%439 = load double, double* %34
%440 = load double*, double** %10
%441 = load i32, i32* %9
%442 = mul nsw i32 3, %441
%443 = add nsw i32 %442, 3
%444 = sext i32 %443 to i64
%445 = getelementptr inbounds double, double* %440, i64 %444
%446 = load double, double* %445
%447 = fadd double %446, %439
store double %447, double* %445
%448 = load double, double* %33
%449 = load double*, double** %10
%450 = load i32, i32* %9
%451 = mul nsw i32 3, %450
%452 = add nsw i32 %451, 4
%453 = sext i32 %452 to i64
%454 = getelementptr inbounds double, double* %449, i64 %453
%455 = load double, double* %454
%456 = fadd double %455, %448
store double %456, double* %454
%457 = load double, double* %25
%458 = load double*, double** %10
%459 = load i32, i32* %9
%460 = mul nsw i32 4, %459
%461 = add nsw i32 %460, 0
%462 = sext i32 %461 to i64
%463 = getelementptr inbounds double, double* %458, i64 %462
%464 = load double, double* %463
%465 = fadd double %464, %457
store double %465, double* %463
%466 = load double, double* %28
%467 = load double*, double** %10
%468 = load i32, i32* %9
%469 = mul nsw i32 4, %468
%470 = add nsw i32 %469, 1
%471 = sext i32 %470 to i64
%472 = getelementptr inbounds double, double* %467, i64 %471
%473 = load double, double* %472
%474 = fadd double %473, %466
store double %474, double* %472
%475 = load double, double* %29
%476 = load double*, double** %10
%477 = load i32, i32* %9
%478 = mul nsw i32 4, %477
%479 = add nsw i32 %478, 2
%480 = sext i32 %479 to i64
%481 = getelementptr inbounds double, double* %476, i64 %480
%482 = load double, double* %481
%483 = fadd double %482, %475
store double %483, double* %481
%484 = load double, double* %33
%485 = load double*, double** %10
%486 = load i32, i32* %9
%487 = mul nsw i32 4, %486
%488 = add nsw i32 %487, 3
%489 = sext i32 %488 to i64
%490 = getelementptr inbounds double, double* %485, i64 %489
%491 = load double, double* %490
%492 = fadd double %491, %484
store double %492, double* %490
%493 = load double, double* %32
%494 = load double*, double** %10
%495 = load i32, i32* %9
%496 = mul nsw i32 4, %495
%497 = add nsw i32 %496, 4
%498 = sext i32 %497 to i64
%499 = getelementptr inbounds double, double* %494, i64 %498
%500 = load double, double* %499
%501 = fadd double %500, %493
store double %501, double* %499
%502 = load double, double* %37
%503 = load double*, double** %10
%504 = load i32, i32* %9
%505 = mul nsw i32 0, %504
%506 = add nsw i32 %505, 0
%507 = sext i32 %506 to i64
%508 = getelementptr inbounds double, double* %503, i64 %507
%509 = load double, double* %508
%510 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %502, double %509)
store double %510, double* %508
%511 = load double, double* %38
%512 = load double*, double** %10
%513 = load i32, i32* %9
%514 = mul nsw i32 0, %513
%515 = add nsw i32 %514, 1
%516 = sext i32 %515 to i64
%517 = getelementptr inbounds double, double* %512, i64 %516
%518 = load double, double* %517
%519 = fadd double %518, %511
store double %519, double* %517
%520 = load double, double* %39
%521 = load double*, double** %10
%522 = load i32, i32* %9
%523 = mul nsw i32 0, %522
%524 = add nsw i32 %523, 2
%525 = sext i32 %524 to i64
%526 = getelementptr inbounds double, double* %521, i64 %525
%527 = load double, double* %526
%528 = fadd double %527, %520
store double %528, double* %526
%529 = load double, double* %41
%530 = load double*, double** %10
%531 = load i32, i32* %9
%532 = mul nsw i32 0, %531
%533 = add nsw i32 %532, 3
%534 = sext i32 %533 to i64
%535 = getelementptr inbounds double, double* %530, i64 %534
%536 = load double, double* %535
%537 = fadd double %536, %529
store double %537, double* %535
%538 = load double, double* %40
%539 = load double, double* %37
%540 = fadd double %538, %539
%541 = load double*, double** %10
%542 = load i32, i32* %9
%543 = mul nsw i32 0, %542
%544 = add nsw i32 %543, 4
%545 = sext i32 %544 to i64
%546 = getelementptr inbounds double, double* %541, i64 %545
%547 = load double, double* %546
%548 = fadd double %547, %540
store double %548, double* %546
%549 = load double, double* %38
%550 = load double*, double** %10
%551 = load i32, i32* %9
%552 = mul nsw i32 1, %551
%553 = add nsw i32 %552, 0
%554 = sext i32 %553 to i64
%555 = getelementptr inbounds double, double* %550, i64 %554
%556 = load double, double* %555
%557 = fadd double %556, %549
store double %557, double* %555
%558 = load double, double* %38
%559 = load double*, double** %10
%560 = load i32, i32* %9
%561 = mul nsw i32 1, %560
%562 = add nsw i32 %561, 4
%563 = sext i32 %562 to i64
%564 = getelementptr inbounds double, double* %559, i64 %563
%565 = load double, double* %564
%566 = fadd double %565, %558
store double %566, double* %564
%567 = load double, double* %39
%568 = load double*, double** %10
%569 = load i32, i32* %9
%570 = mul nsw i32 2, %569
%571 = add nsw i32 %570, 0
%572 = sext i32 %571 to i64
%573 = getelementptr inbounds double, double* %568, i64 %572
%574 = load double, double* %573
%575 = fadd double %574, %567
store double %575, double* %573
%576 = load double, double* %39
%577 = load double*, double** %10
%578 = load i32, i32* %9
%579 = mul nsw i32 2, %578
%580 = add nsw i32 %579, 4
%581 = sext i32 %580 to i64
%582 = getelementptr inbounds double, double* %577, i64 %581
%583 = load double, double* %582
%584 = fadd double %583, %576
store double %584, double* %582
%585 = load double, double* %41
%586 = load double*, double** %10
%587 = load i32, i32* %9
%588 = mul nsw i32 3, %587
%589 = add nsw i32 %588, 0
%590 = sext i32 %589 to i64
%591 = getelementptr inbounds double, double* %586, i64 %590
%592 = load double, double* %591
%593 = fadd double %592, %585
store double %593, double* %591
%594 = load double, double* %41
%595 = load double*, double** %10
%596 = load i32, i32* %9
%597 = mul nsw i32 3, %596
%598 = add nsw i32 %597, 4
%599 = sext i32 %598 to i64
%600 = getelementptr inbounds double, double* %595, i64 %599
%601 = load double, double* %600
%602 = fadd double %601, %594
store double %602, double* %600
%603 = load double, double* %37
%604 = load double, double* %40
%605 = fadd double %603, %604
%606 = load double*, double** %10
%607 = load i32, i32* %9
%608 = mul nsw i32 4, %607
%609 = add nsw i32 %608, 0
%610 = sext i32 %609 to i64
%611 = getelementptr inbounds double, double* %606, i64 %610
%612 = load double, double* %611
%613 = fadd double %612, %605
store double %613, double* %611
%614 = load double, double* %38
%615 = load double*, double** %10
%616 = load i32, i32* %9
%617 = mul nsw i32 4, %616
%618 = add nsw i32 %617, 1
%619 = sext i32 %618 to i64
%620 = getelementptr inbounds double, double* %615, i64 %619
%621 = load double, double* %620
%622 = fadd double %621, %614
store double %622, double* %620
%623 = load double, double* %39
%624 = load double*, double** %10
%625 = load i32, i32* %9
%626 = mul nsw i32 4, %625
%627 = add nsw i32 %626, 2
%628 = sext i32 %627 to i64
%629 = getelementptr inbounds double, double* %624, i64 %628
%630 = load double, double* %629
%631 = fadd double %630, %623
store double %631, double* %629
%632 = load double, double* %41
%633 = load double*, double** %10
%634 = load i32, i32* %9
%635 = mul nsw i32 4, %634
%636 = add nsw i32 %635, 3
%637 = sext i32 %636 to i64
%638 = getelementptr inbounds double, double* %633, i64 %637
%639 = load double, double* %638
%640 = fadd double %639, %632
store double %640, double* %638
%641 = load double, double* %40
%642 = load double*, double** %10
%643 = load i32, i32* %9
%644 = mul nsw i32 4, %643
%645 = add nsw i32 %644, 4
%646 = sext i32 %645 to i64
%647 = getelementptr inbounds double, double* %642, i64 %646
%648 = load double, double* %647
%649 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %641, double %648)
store double %649, double* %647
%650 = load double, double* %19
%651 = load double*, double** %10
%652 = load i32, i32* %9
%653 = mul nsw i32 0, %652
%654 = add nsw i32 %653, 0
%655 = sext i32 %654 to i64
%656 = getelementptr inbounds double, double* %651, i64 %655
%657 = load double, double* %656
%658 = fadd double %657, %650
store double %658, double* %656
%659 = load double, double* %19
%660 = load double*, double** %10
%661 = load i32, i32* %9
%662 = mul nsw i32 0, %661
%663 = add nsw i32 %662, 4
%664 = sext i32 %663 to i64
%665 = getelementptr inbounds double, double* %660, i64 %664
%666 = load double, double* %665
%667 = fadd double %666, %659
store double %667, double* %665
%668 = load double, double* %19
%669 = load double*, double** %10
%670 = load i32, i32* %9
%671 = mul nsw i32 4, %670
%672 = add nsw i32 %671, 0
%673 = sext i32 %672 to i64
%674 = getelementptr inbounds double, double* %669, i64 %673
%675 = load double, double* %674
%676 = fadd double %675, %668
store double %676, double* %674
%677 = load double, double* %19
%678 = load double*, double** %10
%679 = load i32, i32* %9
%680 = mul nsw i32 4, %679
%681 = add nsw i32 %680, 4
%682 = sext i32 %681 to i64
%683 = getelementptr inbounds double, double* %678, i64 %682
%684 = load double, double* %683
%685 = fadd double %684, %677
store double %685, double* %683
%686 = load double, double* %43
%687 = load double*, double** %10
%688 = load i32, i32* %9
%689 = mul nsw i32 0, %688
%690 = add nsw i32 %689, 0
%691 = sext i32 %690 to i64
%692 = getelementptr inbounds double, double* %687, i64 %691
%693 = load double, double* %692
%694 = call double @llvm.fmuladd.f64(double 4.000000e+00, double %686, double %693)
store double %694, double* %692
%695 = load double, double* %44
%696 = load double*, double** %10
%697 = load i32, i32* %9
%698 = mul nsw i32 0, %697
%699 = add nsw i32 %698, 1
%700 = sext i32 %699 to i64
%701 = getelementptr inbounds double, double* %696, i64 %700
%702 = load double, double* %701
%703 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %695, double %702)
store double %703, double* %701
%704 = load double, double* %45
%705 = load double*, double** %10
%706 = load i32, i32* %9
%707 = mul nsw i32 0, %706
%708 = add nsw i32 %707, 2
%709 = sext i32 %708 to i64
%710 = getelementptr inbounds double, double* %705, i64 %709
%711 = load double, double* %710
%712 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %704, double %711)
store double %712, double* %710
%713 = load double, double* %44
%714 = load double*, double** %10
%715 = load i32, i32* %9
%716 = mul nsw i32 1, %715
%717 = add nsw i32 %716, 0
%718 = sext i32 %717 to i64
%719 = getelementptr inbounds double, double* %714, i64 %718
%720 = load double, double* %719
%721 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %713, double %720)
store double %721, double* %719
%722 = load double, double* %43
%723 = load double, double* %46
%724 = fadd double %722, %723
%725 = load double*, double** %10
%726 = load i32, i32* %9
%727 = mul nsw i32 1, %726
%728 = add nsw i32 %727, 1
%729 = sext i32 %728 to i64
%730 = getelementptr inbounds double, double* %725, i64 %729
%731 = load double, double* %730
%732 = fadd double %731, %724
store double %732, double* %730
%733 = load double, double* %47
%734 = load double*, double** %10
%735 = load i32, i32* %9
%736 = mul nsw i32 1, %735
%737 = add nsw i32 %736, 2
%738 = sext i32 %737 to i64
%739 = getelementptr inbounds double, double* %734, i64 %738
%740 = load double, double* %739
%741 = fadd double %740, %733
store double %741, double* %739
%742 = load double, double* %45
%743 = load double*, double** %10
%744 = load i32, i32* %9
%745 = mul nsw i32 1, %744
%746 = add nsw i32 %745, 3
%747 = sext i32 %746 to i64
%748 = getelementptr inbounds double, double* %743, i64 %747
%749 = load double, double* %748
%750 = fadd double %749, %742
store double %750, double* %748
%751 = load double, double* %44
%752 = load double*, double** %10
%753 = load i32, i32* %9
%754 = mul nsw i32 1, %753
%755 = add nsw i32 %754, 4
%756 = sext i32 %755 to i64
%757 = getelementptr inbounds double, double* %752, i64 %756
%758 = load double, double* %757
%759 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %751, double %758)
store double %759, double* %757
%760 = load double, double* %45
%761 = load double*, double** %10
%762 = load i32, i32* %9
%763 = mul nsw i32 2, %762
%764 = add nsw i32 %763, 0
%765 = sext i32 %764 to i64
%766 = getelementptr inbounds double, double* %761, i64 %765
%767 = load double, double* %766
%768 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %760, double %767)
store double %768, double* %766
%769 = load double, double* %47
%770 = load double*, double** %10
%771 = load i32, i32* %9
%772 = mul nsw i32 2, %771
%773 = add nsw i32 %772, 1
%774 = sext i32 %773 to i64
%775 = getelementptr inbounds double, double* %770, i64 %774
%776 = load double, double* %775
%777 = fadd double %776, %769
store double %777, double* %775
%778 = load double, double* %43
%779 = load double, double* %48
%780 = fadd double %778, %779
%781 = load double*, double** %10
%782 = load i32, i32* %9
%783 = mul nsw i32 2, %782
%784 = add nsw i32 %783, 2
%785 = sext i32 %784 to i64
%786 = getelementptr inbounds double, double* %781, i64 %785
%787 = load double, double* %786
%788 = fadd double %787, %780
store double %788, double* %786
%789 = load double, double* %44
%790 = load double*, double** %10
%791 = load i32, i32* %9
%792 = mul nsw i32 2, %791
%793 = add nsw i32 %792, 3
%794 = sext i32 %793 to i64
%795 = getelementptr inbounds double, double* %790, i64 %794
%796 = load double, double* %795
%797 = fadd double %796, %789
store double %797, double* %795
%798 = load double, double* %45
%799 = load double*, double** %10
%800 = load i32, i32* %9
%801 = mul nsw i32 3, %800
%802 = add nsw i32 %801, 1
%803 = sext i32 %802 to i64
%804 = getelementptr inbounds double, double* %799, i64 %803
%805 = load double, double* %804
%806 = fadd double %805, %798
store double %806, double* %804
%807 = load double, double* %44
%808 = load double*, double** %10
%809 = load i32, i32* %9
%810 = mul nsw i32 3, %809
%811 = add nsw i32 %810, 2
%812 = sext i32 %811 to i64
%813 = getelementptr inbounds double, double* %808, i64 %812
%814 = load double, double* %813
%815 = fadd double %814, %807
store double %815, double* %813
%816 = load double, double* %46
%817 = load double, double* %48
%818 = fadd double %816, %817
%819 = load double*, double** %10
%820 = load i32, i32* %9
%821 = mul nsw i32 3, %820
%822 = add nsw i32 %821, 3
%823 = sext i32 %822 to i64
%824 = getelementptr inbounds double, double* %819, i64 %823
%825 = load double, double* %824
%826 = fadd double %825, %818
store double %826, double* %824
%827 = load double, double* %47
%828 = load double*, double** %10
%829 = load i32, i32* %9
%830 = mul nsw i32 3, %829
%831 = add nsw i32 %830, 4
%832 = sext i32 %831 to i64
%833 = getelementptr inbounds double, double* %828, i64 %832
%834 = load double, double* %833
%835 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %827, double %834)
store double %835, double* %833
%836 = load double, double* %44
%837 = load double*, double** %10
%838 = load i32, i32* %9
%839 = mul nsw i32 4, %838
%840 = add nsw i32 %839, 1
%841 = sext i32 %840 to i64
%842 = getelementptr inbounds double, double* %837, i64 %841
%843 = load double, double* %842
%844 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %836, double %843)
store double %844, double* %842
%845 = load double, double* %47
%846 = load double*, double** %10
%847 = load i32, i32* %9
%848 = mul nsw i32 4, %847
%849 = add nsw i32 %848, 3
%850 = sext i32 %849 to i64
%851 = getelementptr inbounds double, double* %846, i64 %850
%852 = load double, double* %851
%853 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %845, double %852)
store double %853, double* %851
%854 = load double, double* %46
%855 = load double*, double** %10
%856 = load i32, i32* %9
%857 = mul nsw i32 4, %856
%858 = add nsw i32 %857, 4
%859 = sext i32 %858 to i64
%860 = getelementptr inbounds double, double* %855, i64 %859
%861 = load double, double* %860
%862 = call double @llvm.fmuladd.f64(double 4.000000e+00, double %854, double %861)
store double %862, double* %860
%863 = load double, double* %21
%864 = load double*, double** %10
%865 = load i32, i32* %9
%866 = mul nsw i32 0, %865
%867 = add nsw i32 %866, 0
%868 = sext i32 %867 to i64
%869 = getelementptr inbounds double, double* %864, i64 %868
%870 = load double, double* %869
%871 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %863, double %870)
store double %871, double* %869
%872 = load double, double* %21
%873 = load double*, double** %10
%874 = load i32, i32* %9
%875 = mul nsw i32 1, %874
%876 = add nsw i32 %875, 1
%877 = sext i32 %876 to i64
%878 = getelementptr inbounds double, double* %873, i64 %877
%879 = load double, double* %878
%880 = fadd double %879, %872
store double %880, double* %878
%881 = load double, double* %21
%882 = load double*, double** %10
%883 = load i32, i32* %9
%884 = mul nsw i32 2, %883
%885 = add nsw i32 %884, 2
%886 = sext i32 %885 to i64
%887 = getelementptr inbounds double, double* %882, i64 %886
%888 = load double, double* %887
%889 = fadd double %888, %881
store double %889, double* %887
%890 = load double, double* %21
%891 = load double*, double** %10
%892 = load i32, i32* %9
%893 = mul nsw i32 3, %892
%894 = add nsw i32 %893, 3
%895 = sext i32 %894 to i64
%896 = getelementptr inbounds double, double* %891, i64 %895
%897 = load double, double* %896
%898 = fadd double %897, %890
store double %898, double* %896
%899 = load double, double* %21
%900 = load double*, double** %10
%901 = load i32, i32* %9
%902 = mul nsw i32 4, %901
%903 = add nsw i32 %902, 4
%904 = sext i32 %903 to i64
%905 = getelementptr inbounds double, double* %900, i64 %904
%906 = load double, double* %905
%907 = call double @llvm.fmuladd.f64(double 2.000000e+00, double %899, double %906)
store double %907, double* %905
ret void
}

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