void matvec_sub(double ablock[], double avec[], double bvec[]) {
  bvec[1 - 1] = bvec[1 - 1] - ablock[(1 - 1) + 5 * (1 - 1)] * avec[1 - 1] -
                ablock[(1 - 1) + 5 * (2 - 1)] * avec[2 - 1] -
                ablock[(1 - 1) + 5 * (3 - 1)] * avec[3 - 1] -
                ablock[(1 - 1) + 5 * (4 - 1)] * avec[4 - 1] -
                ablock[(1 - 1) + 5 * (5 - 1)] * avec[5 - 1];
  bvec[2 - 1] = bvec[2 - 1] - ablock[(2 - 1) + 5 * (1 - 1)] * avec[1 - 1] -
                ablock[(2 - 1) + 5 * (2 - 1)] * avec[2 - 1] -
                ablock[(2 - 1) + 5 * (3 - 1)] * avec[3 - 1] -
                ablock[(2 - 1) + 5 * (4 - 1)] * avec[4 - 1] -
                ablock[(2 - 1) + 5 * (5 - 1)] * avec[5 - 1];
  bvec[3 - 1] = bvec[3 - 1] - ablock[(3 - 1) + 5 * (1 - 1)] * avec[1 - 1] -
                ablock[(3 - 1) + 5 * (2 - 1)] * avec[2 - 1] -
                ablock[(3 - 1) + 5 * (3 - 1)] * avec[3 - 1] -
                ablock[(3 - 1) + 5 * (4 - 1)] * avec[4 - 1] -
                ablock[(3 - 1) + 5 * (5 - 1)] * avec[5 - 1];
  bvec[4 - 1] = bvec[4 - 1] - ablock[(4 - 1) + 5 * (1 - 1)] * avec[1 - 1] -
                ablock[(4 - 1) + 5 * (2 - 1)] * avec[2 - 1] -
                ablock[(4 - 1) + 5 * (3 - 1)] * avec[3 - 1] -
                ablock[(4 - 1) + 5 * (4 - 1)] * avec[4 - 1] -
                ablock[(4 - 1) + 5 * (5 - 1)] * avec[5 - 1];
  bvec[5 - 1] = bvec[5 - 1] - ablock[(5 - 1) + 5 * (1 - 1)] * avec[1 - 1] -
                ablock[(5 - 1) + 5 * (2 - 1)] * avec[2 - 1] -
                ablock[(5 - 1) + 5 * (3 - 1)] * avec[3 - 1] -
                ablock[(5 - 1) + 5 * (4 - 1)] * avec[4 - 1] -
                ablock[(5 - 1) + 5 * (5 - 1)] * avec[5 - 1];
  return;
}


x86 assembly (clang, -O0):
<matvec_sub>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0xa0(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x80(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0xa8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x88(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0xb0(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x90(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0xb8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm1
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x48(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x98(%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm2
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0xc0(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<matvec_sub>:
movsd  (%rdi),%xmm0
movsd  0x28(%rdi),%xmm1
mulsd  (%rsi),%xmm0
movsd  (%rdx),%xmm2
subsd  %xmm0,%xmm2
movsd  0x8(%rdx),%xmm0
mulsd  0x8(%rsi),%xmm1
subsd  %xmm1,%xmm2
movsd  0x50(%rdi),%xmm1
mulsd  0x10(%rsi),%xmm1
subsd  %xmm1,%xmm2
movsd  0x78(%rdi),%xmm1
mulsd  0x18(%rsi),%xmm1
subsd  %xmm1,%xmm2
movsd  0xa0(%rdi),%xmm1
mulsd  0x20(%rsi),%xmm1
subsd  %xmm1,%xmm2
movsd  %xmm2,(%rdx)
movsd  0x8(%rdi),%xmm1
mulsd  (%rsi),%xmm1
movsd  0x30(%rdi),%xmm2
subsd  %xmm1,%xmm0
mulsd  0x8(%rsi),%xmm2
subsd  %xmm2,%xmm0
movsd  0x58(%rdi),%xmm1
mulsd  0x10(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  0x80(%rdi),%xmm1
mulsd  0x18(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  0xa8(%rdi),%xmm1
mulsd  0x20(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rdx)
movsd  0x10(%rdx),%xmm0
movsd  0x10(%rdi),%xmm1
movsd  0x38(%rdi),%xmm2
mulsd  (%rsi),%xmm1
subsd  %xmm1,%xmm0
mulsd  0x8(%rsi),%xmm2
subsd  %xmm2,%xmm0
movsd  0x60(%rdi),%xmm1
mulsd  0x10(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  0x88(%rdi),%xmm1
mulsd  0x18(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  0xb0(%rdi),%xmm1
mulsd  0x20(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rdx)
movsd  0x18(%rdx),%xmm0
movsd  0x18(%rdi),%xmm1
mulsd  (%rsi),%xmm1
movsd  0x40(%rdi),%xmm2
subsd  %xmm1,%xmm0
mulsd  0x8(%rsi),%xmm2
subsd  %xmm2,%xmm0
movsd  0x68(%rdi),%xmm1
mulsd  0x10(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  0x90(%rdi),%xmm1
mulsd  0x18(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  0xb8(%rdi),%xmm1
mulsd  0x20(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rdx)
movsd  0x20(%rdx),%xmm0
movsd  0x20(%rdi),%xmm1
movsd  0x48(%rdi),%xmm2
mulsd  (%rsi),%xmm1
subsd  %xmm1,%xmm0
mulsd  0x8(%rsi),%xmm2
subsd  %xmm2,%xmm0
movsd  0x70(%rdi),%xmm1
mulsd  0x10(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  0x98(%rdi),%xmm1
mulsd  0x18(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  0xc0(%rdi),%xmm1
mulsd  0x20(%rsi),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rdx)
ret

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

LLVM IR (-O2):
define void @matvec_sub(double* %0, double* nocapture %1, double* nocapture %2) {
%4 = load double, double* %2
%5 = load double, double* %0
%6 = load double, double* %1
%7 = fneg double %5
%8 = tail call double @llvm.fmuladd.f64(double %7, double %6, double %4)
%9 = getelementptr inbounds double, double* %0, i64 5
%10 = load double, double* %9
%11 = getelementptr inbounds double, double* %1, i64 1
%12 = load double, double* %11
%13 = fneg double %10
%14 = tail call double @llvm.fmuladd.f64(double %13, double %12, double %8)
%15 = getelementptr inbounds double, double* %0, i64 10
%16 = load double, double* %15
%17 = getelementptr inbounds double, double* %1, i64 2
%18 = load double, double* %17
%19 = fneg double %16
%20 = tail call double @llvm.fmuladd.f64(double %19, double %18, double %14)
%21 = getelementptr inbounds double, double* %0, i64 15
%22 = load double, double* %21
%23 = getelementptr inbounds double, double* %1, i64 3
%24 = load double, double* %23
%25 = fneg double %22
%26 = tail call double @llvm.fmuladd.f64(double %25, double %24, double %20)
%27 = getelementptr inbounds double, double* %0, i64 20
%28 = load double, double* %27
%29 = getelementptr inbounds double, double* %1, i64 4
%30 = load double, double* %29
%31 = fneg double %28
%32 = tail call double @llvm.fmuladd.f64(double %31, double %30, double %26)
store double %32, double* %2
%33 = getelementptr inbounds double, double* %2, i64 1
%34 = load double, double* %33
%35 = getelementptr inbounds double, double* %0, i64 1
%36 = load double, double* %35
%37 = load double, double* %1
%38 = fneg double %36
%39 = tail call double @llvm.fmuladd.f64(double %38, double %37, double %34)
%40 = getelementptr inbounds double, double* %0, i64 6
%41 = load double, double* %40
%42 = load double, double* %11
%43 = fneg double %41
%44 = tail call double @llvm.fmuladd.f64(double %43, double %42, double %39)
%45 = getelementptr inbounds double, double* %0, i64 11
%46 = load double, double* %45
%47 = load double, double* %17
%48 = fneg double %46
%49 = tail call double @llvm.fmuladd.f64(double %48, double %47, double %44)
%50 = getelementptr inbounds double, double* %0, i64 16
%51 = load double, double* %50
%52 = load double, double* %23
%53 = fneg double %51
%54 = tail call double @llvm.fmuladd.f64(double %53, double %52, double %49)
%55 = getelementptr inbounds double, double* %0, i64 21
%56 = load double, double* %55
%57 = load double, double* %29
%58 = fneg double %56
%59 = tail call double @llvm.fmuladd.f64(double %58, double %57, double %54)
store double %59, double* %33
%60 = getelementptr inbounds double, double* %2, i64 2
%61 = load double, double* %60
%62 = getelementptr inbounds double, double* %0, i64 2
%63 = load double, double* %62
%64 = load double, double* %1
%65 = fneg double %63
%66 = tail call double @llvm.fmuladd.f64(double %65, double %64, double %61)
%67 = getelementptr inbounds double, double* %0, i64 7
%68 = load double, double* %67
%69 = load double, double* %11
%70 = fneg double %68
%71 = tail call double @llvm.fmuladd.f64(double %70, double %69, double %66)
%72 = getelementptr inbounds double, double* %0, i64 12
%73 = load double, double* %72
%74 = load double, double* %17
%75 = fneg double %73
%76 = tail call double @llvm.fmuladd.f64(double %75, double %74, double %71)
%77 = getelementptr inbounds double, double* %0, i64 17
%78 = load double, double* %77
%79 = load double, double* %23
%80 = fneg double %78
%81 = tail call double @llvm.fmuladd.f64(double %80, double %79, double %76)
%82 = getelementptr inbounds double, double* %0, i64 22
%83 = load double, double* %82
%84 = load double, double* %29
%85 = fneg double %83
%86 = tail call double @llvm.fmuladd.f64(double %85, double %84, double %81)
store double %86, double* %60
%87 = getelementptr inbounds double, double* %2, i64 3
%88 = load double, double* %87
%89 = getelementptr inbounds double, double* %0, i64 3
%90 = load double, double* %89
%91 = load double, double* %1
%92 = fneg double %90
%93 = tail call double @llvm.fmuladd.f64(double %92, double %91, double %88)
%94 = getelementptr inbounds double, double* %0, i64 8
%95 = load double, double* %94
%96 = load double, double* %11
%97 = fneg double %95
%98 = tail call double @llvm.fmuladd.f64(double %97, double %96, double %93)
%99 = getelementptr inbounds double, double* %0, i64 13
%100 = load double, double* %99
%101 = load double, double* %17
%102 = fneg double %100
%103 = tail call double @llvm.fmuladd.f64(double %102, double %101, double %98)
%104 = getelementptr inbounds double, double* %0, i64 18
%105 = load double, double* %104
%106 = load double, double* %23
%107 = fneg double %105
%108 = tail call double @llvm.fmuladd.f64(double %107, double %106, double %103)
%109 = getelementptr inbounds double, double* %0, i64 23
%110 = load double, double* %109
%111 = load double, double* %29
%112 = fneg double %110
%113 = tail call double @llvm.fmuladd.f64(double %112, double %111, double %108)
store double %113, double* %87
%114 = getelementptr inbounds double, double* %2, i64 4
%115 = load double, double* %114
%116 = getelementptr inbounds double, double* %0, i64 4
%117 = load double, double* %116
%118 = load double, double* %1
%119 = fneg double %117
%120 = tail call double @llvm.fmuladd.f64(double %119, double %118, double %115)
%121 = getelementptr inbounds double, double* %0, i64 9
%122 = load double, double* %121
%123 = load double, double* %11
%124 = fneg double %122
%125 = tail call double @llvm.fmuladd.f64(double %124, double %123, double %120)
%126 = getelementptr inbounds double, double* %0, i64 14
%127 = load double, double* %126
%128 = load double, double* %17
%129 = fneg double %127
%130 = tail call double @llvm.fmuladd.f64(double %129, double %128, double %125)
%131 = getelementptr inbounds double, double* %0, i64 19
%132 = load double, double* %131
%133 = load double, double* %23
%134 = fneg double %132
%135 = tail call double @llvm.fmuladd.f64(double %134, double %133, double %130)
%136 = getelementptr inbounds double, double* %0, i64 24
%137 = load double, double* %136
%138 = load double, double* %29
%139 = fneg double %137
%140 = tail call double @llvm.fmuladd.f64(double %139, double %138, double %135)
store double %140, double* %114
ret void
}