void rmatmult_3_at(double *dbl, int imin, int imax, int jmin, int jmax,
                   int kmin, int kmax, int jp, int kp, double *dbc, double *dbr,
                   double *dcl, double *dcc, double *dcr, double *dfl,
                   double *dfc, double *dfr, double *cbl, double *cbc,
                   double *cbr, double *ccl, double *ccc, double *ccr,
                   double *cfl, double *cfc, double *cfr, double *ubl,
                   double *ubc, double *ubr, double *ucl, double *ucc,
                   double *ucr, double *ufl, double *ufc, double *ufr,
                   double *x, double *b) {
  int i, ii, jj, kk;
  double *xdbl = x - kp - jp - 1;
  double *xdbc = x - kp - jp;
  double *xdbr = x - kp - jp + 1;
  double *xdcl = x - kp - 1;
  double *xdcc = x - kp;
  double *xdcr = x - kp + 1;
  double *xdfl = x - kp + jp - 1;
  double *xdfc = x - kp + jp;
  double *xdfr = x - kp + jp + 1;
  double *xcbl = x - jp - 1;
  double *xcbc = x - jp;
  double *xcbr = x - jp + 1;
  double *xccl = x - 1;
  double *xccc = x;
  double *xccr = x + 1;
  double *xcfl = x + jp - 1;
  double *xcfc = x + jp;
  double *xcfr = x + jp + 1;
  double *xubl = x + kp - jp - 1;
  double *xubc = x + kp - jp;
  double *xubr = x + kp - jp + 1;
  double *xucl = x + kp - 1;
  double *xucc = x + kp;
  double *xucr = x + kp + 1;
  double *xufl = x + kp + jp - 1;
  double *xufc = x + kp + jp;
  double *xufr = x + kp + jp + 1;
  for (kk = 2; kk < kmax; kk++) {
    for (jj = 2; jj < jmax; jj++) {
      for (ii = 2; ii < imax; ii++) {
        i = ii + jj * jp + kk * kp;
        b[i] = dbl[i] * xdbl[i] + dbc[i] * xdbc[i] + dbr[i] * xdbr[i] +
               dcl[i] * xdcl[i] + dcc[i] * xdcc[i] + dcr[i] * xdcr[i] +
               dfl[i] * xdfl[i] + dfc[i] * xdfc[i] + dfr[i] * xdfr[i] +
               cbl[i] * xcbl[i] + cbc[i] * xcbc[i] + cbr[i] * xcbr[i] +
               ccl[i] * xccl[i] + ccc[i] * xccc[i] + ccr[i] * xccr[i] +
               cfl[i] * xcfl[i] + cfc[i] * xcfc[i] + cfr[i] * xcfr[i] +
               ubl[i] * xubl[i] + ubc[i] * xubc[i] + ubr[i] * xubr[i] +
               ucl[i] * xucl[i] + ucc[i] * xucc[i] + ucr[i] * xucr[i] +
               ufl[i] * xufl[i] + ufc[i] * xufc[i] + ufr[i] * xufr[i];
      }
    }
  }
}


x86 assembly (clang, -O0):
<rmatmult_3_at>:
push   %rbp
mov    %rsp,%rbp
sub    $0x88,%rsp
mov    0x100(%rbp),%rax
mov    0xf8(%rbp),%rax
mov    0xf0(%rbp),%rax
mov    0xe8(%rbp),%rax
mov    0xe0(%rbp),%rax
mov    0xd8(%rbp),%rax
mov    0xd0(%rbp),%rax
mov    0xc8(%rbp),%rax
mov    0xc0(%rbp),%rax
mov    0xb8(%rbp),%rax
mov    0xb0(%rbp),%rax
mov    0xa8(%rbp),%rax
mov    0xa0(%rbp),%rax
mov    0x98(%rbp),%rax
mov    0x90(%rbp),%rax
mov    0x88(%rbp),%rax
mov    0x80(%rbp),%rax
mov    0x78(%rbp),%rax
mov    0x70(%rbp),%rax
mov    0x68(%rbp),%rax
mov    0x60(%rbp),%rax
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x38(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x8,%rax
mov    %rax,-0x48(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x50(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x58(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x8,%rax
mov    %rax,-0x60(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x68(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x70(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x8,%rax
mov    %rax,-0x78(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x18(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x80(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x18(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x88(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x18(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x8,%rax
mov    %rax,-0x90(%rbp)
mov    0xf8(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x98(%rbp)
mov    0xf8(%rbp),%rax
mov    %rax,-0xa0(%rbp)
mov    0xf8(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0xa8(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0xb0(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xb8(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x8,%rax
mov    %rax,-0xc0(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0xc8(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xd0(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x8,%rax
mov    %rax,-0xd8(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0xe0(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0xe8(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x8,%rax
mov    %rax,-0xf0(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0xf8(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x100(%rbp)
mov    0xf8(%rbp),%rax
movslq 0x20(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq 0x18(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x8,%rax
mov    %rax,-0x108(%rbp)
movl   $0x2,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    19d9 <rmatmult_3_at+0x8d9>
movl   $0x2,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    19c6 <rmatmult_3_at+0x8c6>
movl   $0x2,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    19b3 <rmatmult_3_at+0x8b3>
mov    -0x24(%rbp),%eax
mov    -0x28(%rbp),%ecx
imul   0x18(%rbp),%ecx
add    %ecx,%eax
mov    -0x2c(%rbp),%ecx
imul   0x20(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x38(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    0x28(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x20(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x30(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x48(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x38(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x50(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x40(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x48(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x60(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x50(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x68(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x58(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x70(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x60(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x78(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x68(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x80(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x70(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x88(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x78(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x90(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x80(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x98(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x88(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0xa0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0x90(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0xa8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x98(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0xb0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0xa0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0xb8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0xa8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0xc0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0xb0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0xc8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0xb8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0xd0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0xc0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0xd8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0xc8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0xe0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0xd0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0xe8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0xd8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0xf0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0xe0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0xf8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0xe8(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x100(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    0xf0(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x108(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x100(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1583 <rmatmult_3_at+0x483>
jmp    19b8 <rmatmult_3_at+0x8b8>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1570 <rmatmult_3_at+0x470>
jmp    19cb <rmatmult_3_at+0x8cb>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    155d <rmatmult_3_at+0x45d>
add    $0x88,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rmatmult_3_at>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %r8d,-0x2c(%rsp)
mov    %edx,-0x30(%rsp)
cmpl   $0x3,0x38(%rsp)
jl     14d3 <rmatmult_3_at+0x3d3>
movslq 0x48(%rsp),%r8
movslq 0x40(%rsp),%r11
mov    0x120(%rsp),%rax
lea    0x0(,%r8,8),%rcx
mov    %rax,%rbx
sub    %rcx,%rbx
lea    0x0(,%r11,8),%rdx
mov    %rbx,%rcx
sub    %rdx,%rcx
mov    %rax,%rbp
sub    %rdx,%rbp
lea    (%rax,%r8,8),%r10
mov    %r10,%r9
sub    %rdx,%r9
mov    -0x30(%rsp),%esi
lea    (%r11,%r11,1),%edx
mov    %r8,-0x20(%rsp)
lea    (%rdx,%r8,2),%edx
add    $0x2,%edx
mov    %edx,-0x38(%rsp)
add    $0xfffffffffffffffe,%rsi
mov    %rsi,-0x10(%rsp)
lea    (%rbx,%r11,8),%r13
lea    (%rax,%r11,8),%rsi
mov    %r11,-0x8(%rsp)
lea    (%r10,%r11,8),%r11
mov    $0x2,%r8d
mov    %rdi,-0x18(%rsp)
mov    -0x18(%rsp),%r15
jmp    11c0 <rmatmult_3_at+0xc0>
mov    -0x28(%rsp),%r8d
add    $0x1,%r8d
mov    -0x38(%rsp),%edx
add    -0x20(%rsp),%edx
mov    %edx,-0x38(%rsp)
cmp    0x38(%rsp),%r8d
je     14d3 <rmatmult_3_at+0x3d3>
mov    %r8d,-0x28(%rsp)
cmpl   $0x3,-0x2c(%rsp)
jl     11a0 <rmatmult_3_at+0xa0>
mov    $0x2,%edx
mov    -0x38(%rsp),%eax
mov    %eax,-0x34(%rsp)
jmp    11f9 <rmatmult_3_at+0xf9>
nopl   0x0(%rax,%rax,1)
mov    -0x24(%rsp),%edx
add    $0x1,%edx
mov    -0x34(%rsp),%eax
add    -0x8(%rsp),%eax
mov    %eax,-0x34(%rsp)
cmp    -0x2c(%rsp),%edx
je     11a0 <rmatmult_3_at+0xa0>
mov    %edx,-0x24(%rsp)
cmpl   $0x3,-0x30(%rsp)
mov    0x60(%rsp),%r8
mov    0x120(%rsp),%r12
jl     11e0 <rmatmult_3_at+0xe0>
mov    -0x10(%rsp),%rdx
mov    -0x34(%rsp),%eax
mov    %eax,%r14d
mov    0x110(%rsp),%rax
cs nopw 0x0(%rax,%rax,1)
nop
movslq %r14d,%r14
movsd  (%r15,%r14,8),%xmm0
mov    0x50(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  (%rcx,%r14,8),%xmm1
mulsd  -0x8(%rcx,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0x58(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  0x8(%rcx,%r14,8),%xmm1
addsd  %xmm0,%xmm1
movsd  (%r8,%r14,8),%xmm0
mulsd  -0x8(%rbx,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0x68(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  (%rbx,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    0x70(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm0
mulsd  0x8(%rbx,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0x78(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  -0x8(%r13,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    0x80(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm0
mulsd  0x0(%r13,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0x88(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  0x8(%r13,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    0x90(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm0
mulsd  -0x8(%rbp,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0x98(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  0x0(%rbp,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    0xa0(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm0
mulsd  0x8(%rbp,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0xa8(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  -0x8(%r12,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    0xb0(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm0
mulsd  (%r12,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0xb8(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  0x8(%r12,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    0xc0(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm0
mulsd  -0x8(%rsi,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0xc8(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  (%rsi,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    0xd0(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm0
mulsd  0x8(%rsi,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0xd8(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  -0x8(%r9,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    0xe0(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm0
mulsd  (%r9,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0xe8(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  0x8(%r9,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    0xf0(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm0
mulsd  -0x8(%r10,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0xf8(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  (%r10,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    0x100(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm0
mulsd  0x8(%r10,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0x108(%rsp),%rdi
movsd  (%rdi,%r14,8),%xmm1
mulsd  -0x8(%r11,%r14,8),%xmm1
addsd  %xmm0,%xmm1
movsd  (%rax,%r14,8),%xmm0
mulsd  (%r11,%r14,8),%xmm0
addsd  %xmm1,%xmm0
mov    0x118(%rsp),%rax
movsd  (%rax,%r14,8),%xmm1
mov    0x110(%rsp),%rax
mulsd  0x8(%r11,%r14,8),%xmm1
addsd  %xmm0,%xmm1
mov    %r8,%rdi
mov    0x128(%rsp),%r8
movsd  %xmm1,(%r8,%r14,8)
mov    %rdi,%r8
add    $0x1,%r14d
add    $0xffffffffffffffff,%rdx
jne    1230 <rmatmult_3_at+0x130>
jmp    11e0 <rmatmult_3_at+0xe0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @rmatmult_3_at(double* %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, double* %9, double* %10, double* %11, double* %12, double* %13, double* %14, double* %15, double* %16, double* %17, double* %18, double* %19, double* %20, double* %21, double* %22, double* %23, double* %24, double* %25, double* %26, double* %27, double* %28, double* %29, double* %30, double* %31, double* %32, double* %33, double* %34, double* %35, double* %36) {
%38 = alloca double*
%39 = alloca i32
%40 = alloca i32
%41 = alloca i32
%42 = alloca i32
%43 = alloca i32
%44 = alloca i32
%45 = alloca i32
%46 = alloca i32
%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 i32
%76 = alloca i32
%77 = alloca i32
%78 = alloca i32
%79 = alloca double*
%80 = alloca double*
%81 = alloca double*
%82 = alloca double*
%83 = alloca double*
%84 = alloca double*
%85 = alloca double*
%86 = alloca double*
%87 = alloca double*
%88 = alloca double*
%89 = alloca double*
%90 = alloca double*
%91 = alloca double*
%92 = alloca double*
%93 = alloca double*
%94 = alloca double*
%95 = alloca double*
%96 = alloca double*
%97 = alloca double*
%98 = alloca double*
%99 = alloca double*
%100 = alloca double*
%101 = alloca double*
%102 = alloca double*
%103 = alloca double*
%104 = alloca double*
%105 = alloca double*
store double* %0, double** %38
store i32 %1, i32* %39
store i32 %2, i32* %40
store i32 %3, i32* %41
store i32 %4, i32* %42
store i32 %5, i32* %43
store i32 %6, i32* %44
store i32 %7, i32* %45
store i32 %8, i32* %46
store double* %9, double** %47
store double* %10, double** %48
store double* %11, double** %49
store double* %12, double** %50
store double* %13, double** %51
store double* %14, double** %52
store double* %15, double** %53
store double* %16, double** %54
store double* %17, double** %55
store double* %18, double** %56
store double* %19, double** %57
store double* %20, double** %58
store double* %21, double** %59
store double* %22, double** %60
store double* %23, double** %61
store double* %24, double** %62
store double* %25, double** %63
store double* %26, double** %64
store double* %27, double** %65
store double* %28, double** %66
store double* %29, double** %67
store double* %30, double** %68
store double* %31, double** %69
store double* %32, double** %70
store double* %33, double** %71
store double* %34, double** %72
store double* %35, double** %73
store double* %36, double** %74
%106 = load double*, double** %73
%107 = load i32, i32* %46
%108 = sext i32 %107 to i64
%109 = sub i64 0, %108
%110 = getelementptr inbounds double, double* %106, i64 %109
%111 = load i32, i32* %45
%112 = sext i32 %111 to i64
%113 = sub i64 0, %112
%114 = getelementptr inbounds double, double* %110, i64 %113
%115 = getelementptr inbounds double, double* %114, i64 -1
store double* %115, double** %79
%116 = load double*, double** %73
%117 = load i32, i32* %46
%118 = sext i32 %117 to i64
%119 = sub i64 0, %118
%120 = getelementptr inbounds double, double* %116, i64 %119
%121 = load i32, i32* %45
%122 = sext i32 %121 to i64
%123 = sub i64 0, %122
%124 = getelementptr inbounds double, double* %120, i64 %123
store double* %124, double** %80
%125 = load double*, double** %73
%126 = load i32, i32* %46
%127 = sext i32 %126 to i64
%128 = sub i64 0, %127
%129 = getelementptr inbounds double, double* %125, i64 %128
%130 = load i32, i32* %45
%131 = sext i32 %130 to i64
%132 = sub i64 0, %131
%133 = getelementptr inbounds double, double* %129, i64 %132
%134 = getelementptr inbounds double, double* %133, i64 1
store double* %134, double** %81
%135 = load double*, double** %73
%136 = load i32, i32* %46
%137 = sext i32 %136 to i64
%138 = sub i64 0, %137
%139 = getelementptr inbounds double, double* %135, i64 %138
%140 = getelementptr inbounds double, double* %139, i64 -1
store double* %140, double** %82
%141 = load double*, double** %73
%142 = load i32, i32* %46
%143 = sext i32 %142 to i64
%144 = sub i64 0, %143
%145 = getelementptr inbounds double, double* %141, i64 %144
store double* %145, double** %83
%146 = load double*, double** %73
%147 = load i32, i32* %46
%148 = sext i32 %147 to i64
%149 = sub i64 0, %148
%150 = getelementptr inbounds double, double* %146, i64 %149
%151 = getelementptr inbounds double, double* %150, i64 1
store double* %151, double** %84
%152 = load double*, double** %73
%153 = load i32, i32* %46
%154 = sext i32 %153 to i64
%155 = sub i64 0, %154
%156 = getelementptr inbounds double, double* %152, i64 %155
%157 = load i32, i32* %45
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds double, double* %156, i64 %158
%160 = getelementptr inbounds double, double* %159, i64 -1
store double* %160, double** %85
%161 = load double*, double** %73
%162 = load i32, i32* %46
%163 = sext i32 %162 to i64
%164 = sub i64 0, %163
%165 = getelementptr inbounds double, double* %161, i64 %164
%166 = load i32, i32* %45
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds double, double* %165, i64 %167
store double* %168, double** %86
%169 = load double*, double** %73
%170 = load i32, i32* %46
%171 = sext i32 %170 to i64
%172 = sub i64 0, %171
%173 = getelementptr inbounds double, double* %169, i64 %172
%174 = load i32, i32* %45
%175 = sext i32 %174 to i64
%176 = getelementptr inbounds double, double* %173, i64 %175
%177 = getelementptr inbounds double, double* %176, i64 1
store double* %177, double** %87
%178 = load double*, double** %73
%179 = load i32, i32* %45
%180 = sext i32 %179 to i64
%181 = sub i64 0, %180
%182 = getelementptr inbounds double, double* %178, i64 %181
%183 = getelementptr inbounds double, double* %182, i64 -1
store double* %183, double** %88
%184 = load double*, double** %73
%185 = load i32, i32* %45
%186 = sext i32 %185 to i64
%187 = sub i64 0, %186
%188 = getelementptr inbounds double, double* %184, i64 %187
store double* %188, double** %89
%189 = load double*, double** %73
%190 = load i32, i32* %45
%191 = sext i32 %190 to i64
%192 = sub i64 0, %191
%193 = getelementptr inbounds double, double* %189, i64 %192
%194 = getelementptr inbounds double, double* %193, i64 1
store double* %194, double** %90
%195 = load double*, double** %73
%196 = getelementptr inbounds double, double* %195, i64 -1
store double* %196, double** %91
%197 = load double*, double** %73
store double* %197, double** %92
%198 = load double*, double** %73
%199 = getelementptr inbounds double, double* %198, i64 1
store double* %199, double** %93
%200 = load double*, double** %73
%201 = load i32, i32* %45
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds double, double* %200, i64 %202
%204 = getelementptr inbounds double, double* %203, i64 -1
store double* %204, double** %94
%205 = load double*, double** %73
%206 = load i32, i32* %45
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds double, double* %205, i64 %207
store double* %208, double** %95
%209 = load double*, double** %73
%210 = load i32, i32* %45
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds double, double* %209, i64 %211
%213 = getelementptr inbounds double, double* %212, i64 1
store double* %213, double** %96
%214 = load double*, double** %73
%215 = load i32, i32* %46
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds double, double* %214, i64 %216
%218 = load i32, i32* %45
%219 = sext i32 %218 to i64
%220 = sub i64 0, %219
%221 = getelementptr inbounds double, double* %217, i64 %220
%222 = getelementptr inbounds double, double* %221, i64 -1
store double* %222, double** %97
%223 = load double*, double** %73
%224 = load i32, i32* %46
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds double, double* %223, i64 %225
%227 = load i32, i32* %45
%228 = sext i32 %227 to i64
%229 = sub i64 0, %228
%230 = getelementptr inbounds double, double* %226, i64 %229
store double* %230, double** %98
%231 = load double*, double** %73
%232 = load i32, i32* %46
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds double, double* %231, i64 %233
%235 = load i32, i32* %45
%236 = sext i32 %235 to i64
%237 = sub i64 0, %236
%238 = getelementptr inbounds double, double* %234, i64 %237
%239 = getelementptr inbounds double, double* %238, i64 1
store double* %239, double** %99
%240 = load double*, double** %73
%241 = load i32, i32* %46
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds double, double* %240, i64 %242
%244 = getelementptr inbounds double, double* %243, i64 -1
store double* %244, double** %100
%245 = load double*, double** %73
%246 = load i32, i32* %46
%247 = sext i32 %246 to i64
%248 = getelementptr inbounds double, double* %245, i64 %247
store double* %248, double** %101
%249 = load double*, double** %73
%250 = load i32, i32* %46
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds double, double* %249, i64 %251
%253 = getelementptr inbounds double, double* %252, i64 1
store double* %253, double** %102
%254 = load double*, double** %73
%255 = load i32, i32* %46
%256 = sext i32 %255 to i64
%257 = getelementptr inbounds double, double* %254, i64 %256
%258 = load i32, i32* %45
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds double, double* %257, i64 %259
%261 = getelementptr inbounds double, double* %260, i64 -1
store double* %261, double** %103
%262 = load double*, double** %73
%263 = load i32, i32* %46
%264 = sext i32 %263 to i64
%265 = getelementptr inbounds double, double* %262, i64 %264
%266 = load i32, i32* %45
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds double, double* %265, i64 %267
store double* %268, double** %104
%269 = load double*, double** %73
%270 = load i32, i32* %46
%271 = sext i32 %270 to i64
%272 = getelementptr inbounds double, double* %269, i64 %271
%273 = load i32, i32* %45
%274 = sext i32 %273 to i64
%275 = getelementptr inbounds double, double* %272, i64 %274
%276 = getelementptr inbounds double, double* %275, i64 1
store double* %276, double** %105
store i32 2, i32* %78
br label %277
277: ; preds = %610, %37
%278 = load i32, i32* %78
%279 = load i32, i32* %44
%280 = icmp slt i32 %278, %279
br i1 %280, label %281, label %613
281: ; preds = %277
store i32 2, i32* %77
br label %282
282: ; preds = %606, %281
%283 = load i32, i32* %77
%284 = load i32, i32* %42
%285 = icmp slt i32 %283, %284
br i1 %285, label %286, label %609
286: ; preds = %282
store i32 2, i32* %76
br label %287
287: ; preds = %602, %286
%288 = load i32, i32* %76
%289 = load i32, i32* %40
%290 = icmp slt i32 %288, %289
br i1 %290, label %291, label %605
291: ; preds = %287
%292 = load i32, i32* %76
%293 = load i32, i32* %77
%294 = load i32, i32* %45
%295 = mul nsw i32 %293, %294
%296 = add nsw i32 %292, %295
%297 = load i32, i32* %78
%298 = load i32, i32* %46
%299 = mul nsw i32 %297, %298
%300 = add nsw i32 %296, %299
store i32 %300, i32* %75
%301 = load double*, double** %38
%302 = load i32, i32* %75
%303 = sext i32 %302 to i64
%304 = getelementptr inbounds double, double* %301, i64 %303
%305 = load double, double* %304
%306 = load double*, double** %79
%307 = load i32, i32* %75
%308 = sext i32 %307 to i64
%309 = getelementptr inbounds double, double* %306, i64 %308
%310 = load double, double* %309
%311 = load double*, double** %47
%312 = load i32, i32* %75
%313 = sext i32 %312 to i64
%314 = getelementptr inbounds double, double* %311, i64 %313
%315 = load double, double* %314
%316 = load double*, double** %80
%317 = load i32, i32* %75
%318 = sext i32 %317 to i64
%319 = getelementptr inbounds double, double* %316, i64 %318
%320 = load double, double* %319
%321 = fmul double %315, %320
%322 = call double @llvm.fmuladd.f64(double %305, double %310, double %321)
%323 = load double*, double** %48
%324 = load i32, i32* %75
%325 = sext i32 %324 to i64
%326 = getelementptr inbounds double, double* %323, i64 %325
%327 = load double, double* %326
%328 = load double*, double** %81
%329 = load i32, i32* %75
%330 = sext i32 %329 to i64
%331 = getelementptr inbounds double, double* %328, i64 %330
%332 = load double, double* %331
%333 = call double @llvm.fmuladd.f64(double %327, double %332, double %322)
%334 = load double*, double** %49
%335 = load i32, i32* %75
%336 = sext i32 %335 to i64
%337 = getelementptr inbounds double, double* %334, i64 %336
%338 = load double, double* %337
%339 = load double*, double** %82
%340 = load i32, i32* %75
%341 = sext i32 %340 to i64
%342 = getelementptr inbounds double, double* %339, i64 %341
%343 = load double, double* %342
%344 = call double @llvm.fmuladd.f64(double %338, double %343, double %333)
%345 = load double*, double** %50
%346 = load i32, i32* %75
%347 = sext i32 %346 to i64
%348 = getelementptr inbounds double, double* %345, i64 %347
%349 = load double, double* %348
%350 = load double*, double** %83
%351 = load i32, i32* %75
%352 = sext i32 %351 to i64
%353 = getelementptr inbounds double, double* %350, i64 %352
%354 = load double, double* %353
%355 = call double @llvm.fmuladd.f64(double %349, double %354, double %344)
%356 = load double*, double** %51
%357 = load i32, i32* %75
%358 = sext i32 %357 to i64
%359 = getelementptr inbounds double, double* %356, i64 %358
%360 = load double, double* %359
%361 = load double*, double** %84
%362 = load i32, i32* %75
%363 = sext i32 %362 to i64
%364 = getelementptr inbounds double, double* %361, i64 %363
%365 = load double, double* %364
%366 = call double @llvm.fmuladd.f64(double %360, double %365, double %355)
%367 = load double*, double** %52
%368 = load i32, i32* %75
%369 = sext i32 %368 to i64
%370 = getelementptr inbounds double, double* %367, i64 %369
%371 = load double, double* %370
%372 = load double*, double** %85
%373 = load i32, i32* %75
%374 = sext i32 %373 to i64
%375 = getelementptr inbounds double, double* %372, i64 %374
%376 = load double, double* %375
%377 = call double @llvm.fmuladd.f64(double %371, double %376, double %366)
%378 = load double*, double** %53
%379 = load i32, i32* %75
%380 = sext i32 %379 to i64
%381 = getelementptr inbounds double, double* %378, i64 %380
%382 = load double, double* %381
%383 = load double*, double** %86
%384 = load i32, i32* %75
%385 = sext i32 %384 to i64
%386 = getelementptr inbounds double, double* %383, i64 %385
%387 = load double, double* %386
%388 = call double @llvm.fmuladd.f64(double %382, double %387, double %377)
%389 = load double*, double** %54
%390 = load i32, i32* %75
%391 = sext i32 %390 to i64
%392 = getelementptr inbounds double, double* %389, i64 %391
%393 = load double, double* %392
%394 = load double*, double** %87
%395 = load i32, i32* %75
%396 = sext i32 %395 to i64
%397 = getelementptr inbounds double, double* %394, i64 %396
%398 = load double, double* %397
%399 = call double @llvm.fmuladd.f64(double %393, double %398, double %388)
%400 = load double*, double** %55
%401 = load i32, i32* %75
%402 = sext i32 %401 to i64
%403 = getelementptr inbounds double, double* %400, i64 %402
%404 = load double, double* %403
%405 = load double*, double** %88
%406 = load i32, i32* %75
%407 = sext i32 %406 to i64
%408 = getelementptr inbounds double, double* %405, i64 %407
%409 = load double, double* %408
%410 = call double @llvm.fmuladd.f64(double %404, double %409, double %399)
%411 = load double*, double** %56
%412 = load i32, i32* %75
%413 = sext i32 %412 to i64
%414 = getelementptr inbounds double, double* %411, i64 %413
%415 = load double, double* %414
%416 = load double*, double** %89
%417 = load i32, i32* %75
%418 = sext i32 %417 to i64
%419 = getelementptr inbounds double, double* %416, i64 %418
%420 = load double, double* %419
%421 = call double @llvm.fmuladd.f64(double %415, double %420, double %410)
%422 = load double*, double** %57
%423 = load i32, i32* %75
%424 = sext i32 %423 to i64
%425 = getelementptr inbounds double, double* %422, i64 %424
%426 = load double, double* %425
%427 = load double*, double** %90
%428 = load i32, i32* %75
%429 = sext i32 %428 to i64
%430 = getelementptr inbounds double, double* %427, i64 %429
%431 = load double, double* %430
%432 = call double @llvm.fmuladd.f64(double %426, double %431, double %421)
%433 = load double*, double** %58
%434 = load i32, i32* %75
%435 = sext i32 %434 to i64
%436 = getelementptr inbounds double, double* %433, i64 %435
%437 = load double, double* %436
%438 = load double*, double** %91
%439 = load i32, i32* %75
%440 = sext i32 %439 to i64
%441 = getelementptr inbounds double, double* %438, i64 %440
%442 = load double, double* %441
%443 = call double @llvm.fmuladd.f64(double %437, double %442, double %432)
%444 = load double*, double** %59
%445 = load i32, i32* %75
%446 = sext i32 %445 to i64
%447 = getelementptr inbounds double, double* %444, i64 %446
%448 = load double, double* %447
%449 = load double*, double** %92
%450 = load i32, i32* %75
%451 = sext i32 %450 to i64
%452 = getelementptr inbounds double, double* %449, i64 %451
%453 = load double, double* %452
%454 = call double @llvm.fmuladd.f64(double %448, double %453, double %443)
%455 = load double*, double** %60
%456 = load i32, i32* %75
%457 = sext i32 %456 to i64
%458 = getelementptr inbounds double, double* %455, i64 %457
%459 = load double, double* %458
%460 = load double*, double** %93
%461 = load i32, i32* %75
%462 = sext i32 %461 to i64
%463 = getelementptr inbounds double, double* %460, i64 %462
%464 = load double, double* %463
%465 = call double @llvm.fmuladd.f64(double %459, double %464, double %454)
%466 = load double*, double** %61
%467 = load i32, i32* %75
%468 = sext i32 %467 to i64
%469 = getelementptr inbounds double, double* %466, i64 %468
%470 = load double, double* %469
%471 = load double*, double** %94
%472 = load i32, i32* %75
%473 = sext i32 %472 to i64
%474 = getelementptr inbounds double, double* %471, i64 %473
%475 = load double, double* %474
%476 = call double @llvm.fmuladd.f64(double %470, double %475, double %465)
%477 = load double*, double** %62
%478 = load i32, i32* %75
%479 = sext i32 %478 to i64
%480 = getelementptr inbounds double, double* %477, i64 %479
%481 = load double, double* %480
%482 = load double*, double** %95
%483 = load i32, i32* %75
%484 = sext i32 %483 to i64
%485 = getelementptr inbounds double, double* %482, i64 %484
%486 = load double, double* %485
%487 = call double @llvm.fmuladd.f64(double %481, double %486, double %476)
%488 = load double*, double** %63
%489 = load i32, i32* %75
%490 = sext i32 %489 to i64
%491 = getelementptr inbounds double, double* %488, i64 %490
%492 = load double, double* %491
%493 = load double*, double** %96
%494 = load i32, i32* %75
%495 = sext i32 %494 to i64
%496 = getelementptr inbounds double, double* %493, i64 %495
%497 = load double, double* %496
%498 = call double @llvm.fmuladd.f64(double %492, double %497, double %487)
%499 = load double*, double** %64
%500 = load i32, i32* %75
%501 = sext i32 %500 to i64
%502 = getelementptr inbounds double, double* %499, i64 %501
%503 = load double, double* %502
%504 = load double*, double** %97
%505 = load i32, i32* %75
%506 = sext i32 %505 to i64
%507 = getelementptr inbounds double, double* %504, i64 %506
%508 = load double, double* %507
%509 = call double @llvm.fmuladd.f64(double %503, double %508, double %498)
%510 = load double*, double** %65
%511 = load i32, i32* %75
%512 = sext i32 %511 to i64
%513 = getelementptr inbounds double, double* %510, i64 %512
%514 = load double, double* %513
%515 = load double*, double** %98
%516 = load i32, i32* %75
%517 = sext i32 %516 to i64
%518 = getelementptr inbounds double, double* %515, i64 %517
%519 = load double, double* %518
%520 = call double @llvm.fmuladd.f64(double %514, double %519, double %509)
%521 = load double*, double** %66
%522 = load i32, i32* %75
%523 = sext i32 %522 to i64
%524 = getelementptr inbounds double, double* %521, i64 %523
%525 = load double, double* %524
%526 = load double*, double** %99
%527 = load i32, i32* %75
%528 = sext i32 %527 to i64
%529 = getelementptr inbounds double, double* %526, i64 %528
%530 = load double, double* %529
%531 = call double @llvm.fmuladd.f64(double %525, double %530, double %520)
%532 = load double*, double** %67
%533 = load i32, i32* %75
%534 = sext i32 %533 to i64
%535 = getelementptr inbounds double, double* %532, i64 %534
%536 = load double, double* %535
%537 = load double*, double** %100
%538 = load i32, i32* %75
%539 = sext i32 %538 to i64
%540 = getelementptr inbounds double, double* %537, i64 %539
%541 = load double, double* %540
%542 = call double @llvm.fmuladd.f64(double %536, double %541, double %531)
%543 = load double*, double** %68
%544 = load i32, i32* %75
%545 = sext i32 %544 to i64
%546 = getelementptr inbounds double, double* %543, i64 %545
%547 = load double, double* %546
%548 = load double*, double** %101
%549 = load i32, i32* %75
%550 = sext i32 %549 to i64
%551 = getelementptr inbounds double, double* %548, i64 %550
%552 = load double, double* %551
%553 = call double @llvm.fmuladd.f64(double %547, double %552, double %542)
%554 = load double*, double** %69
%555 = load i32, i32* %75
%556 = sext i32 %555 to i64
%557 = getelementptr inbounds double, double* %554, i64 %556
%558 = load double, double* %557
%559 = load double*, double** %102
%560 = load i32, i32* %75
%561 = sext i32 %560 to i64
%562 = getelementptr inbounds double, double* %559, i64 %561
%563 = load double, double* %562
%564 = call double @llvm.fmuladd.f64(double %558, double %563, double %553)
%565 = load double*, double** %70
%566 = load i32, i32* %75
%567 = sext i32 %566 to i64
%568 = getelementptr inbounds double, double* %565, i64 %567
%569 = load double, double* %568
%570 = load double*, double** %103
%571 = load i32, i32* %75
%572 = sext i32 %571 to i64
%573 = getelementptr inbounds double, double* %570, i64 %572
%574 = load double, double* %573
%575 = call double @llvm.fmuladd.f64(double %569, double %574, double %564)
%576 = load double*, double** %71
%577 = load i32, i32* %75
%578 = sext i32 %577 to i64
%579 = getelementptr inbounds double, double* %576, i64 %578
%580 = load double, double* %579
%581 = load double*, double** %104
%582 = load i32, i32* %75
%583 = sext i32 %582 to i64
%584 = getelementptr inbounds double, double* %581, i64 %583
%585 = load double, double* %584
%586 = call double @llvm.fmuladd.f64(double %580, double %585, double %575)
%587 = load double*, double** %72
%588 = load i32, i32* %75
%589 = sext i32 %588 to i64
%590 = getelementptr inbounds double, double* %587, i64 %589
%591 = load double, double* %590
%592 = load double*, double** %105
%593 = load i32, i32* %75
%594 = sext i32 %593 to i64
%595 = getelementptr inbounds double, double* %592, i64 %594
%596 = load double, double* %595
%597 = call double @llvm.fmuladd.f64(double %591, double %596, double %586)
%598 = load double*, double** %74
%599 = load i32, i32* %75
%600 = sext i32 %599 to i64
%601 = getelementptr inbounds double, double* %598, i64 %600
store double %597, double* %601
br label %602
602: ; preds = %291
%603 = load i32, i32* %76
%604 = add nsw i32 %603, 1
store i32 %604, i32* %76
br label %287
605: ; preds = %287
br label %606
606: ; preds = %605
%607 = load i32, i32* %77
%608 = add nsw i32 %607, 1
store i32 %608, i32* %77
br label %282
609: ; preds = %282
br label %610
610: ; preds = %609
%611 = load i32, i32* %78
%612 = add nsw i32 %611, 1
store i32 %612, i32* %78
br label %277
613: ; preds = %277
ret void
}

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