void deriche(double x1, double x2, double x3, double x4, double x5, double x6,
             double x7, double x8, double y1, double y2, double y3, double y4,
             double y5, double y6, double y7, double y8, double z1, double z2,
             double z3, double z4, double z5, double z6, double z7, double z8,
             double w1, double w2, double w3, double w4, double w5, double w6,
             double w7, double w8, double h1, double h2, double h3, double h4,
             double c1, double c2, double a1, double a2, double a3, double a4,
             double a5, double a6, double a7, double a8, double b1, double b2,
             double *sum) {
  double T0 = c1 * (a1 * x1 + a2 * x2 + b1 * y1 + b2 * y2 + a3 * x3 + a4 * x4 +
                    b1 * y3 + b2 * y4);
  double T1 = c1 * (a1 * x5 + a2 * x6 + b1 * y5 + b2 * y6 + a3 * x7 + a4 * x8 +
                    b1 * y7 + b2 * y8);
  double T2 = c1 * (a1 * z1 + a2 * z2 + b1 * w1 + b2 * w2 + a3 * z3 + a4 * z4 +
                    b1 * w3 + b2 * w4);
  double T3 = c1 * (a1 * z5 + a2 * z6 + b1 * w5 + b2 * w6 + a3 * z7 + a4 * z8 +
                    b1 * w7 + b2 * w8);
  double T4 = a5 * T0 + a6 * T1 + b1 * h1 + b2 * h2;
  double T5 = a7 * T2 + a8 * T3 + b1 * h3 + b2 * h4;
  *sum = c2 * (T4 + T5);
}


x86 assembly (clang, -O0):
<deriche>:
push   %rbp
mov    %rsp,%rbp
movsd  0x148(%rbp),%xmm8
movsd  0x140(%rbp),%xmm8
movsd  0x138(%rbp),%xmm8
movsd  0x130(%rbp),%xmm8
movsd  0x128(%rbp),%xmm8
movsd  0x120(%rbp),%xmm8
movsd  0x118(%rbp),%xmm8
movsd  0x110(%rbp),%xmm8
movsd  0x108(%rbp),%xmm8
movsd  0x100(%rbp),%xmm8
movsd  0xf8(%rbp),%xmm8
movsd  0xf0(%rbp),%xmm8
movsd  0xe8(%rbp),%xmm8
movsd  0xe0(%rbp),%xmm8
movsd  0xd8(%rbp),%xmm8
movsd  0xd0(%rbp),%xmm8
movsd  0xc8(%rbp),%xmm8
movsd  0xc0(%rbp),%xmm8
movsd  0xb8(%rbp),%xmm8
movsd  0xb0(%rbp),%xmm8
movsd  0xa8(%rbp),%xmm8
movsd  0xa0(%rbp),%xmm8
movsd  0x98(%rbp),%xmm8
movsd  0x90(%rbp),%xmm8
movsd  0x88(%rbp),%xmm8
movsd  0x80(%rbp),%xmm8
movsd  0x78(%rbp),%xmm8
movsd  0x70(%rbp),%xmm8
movsd  0x68(%rbp),%xmm8
movsd  0x60(%rbp),%xmm8
movsd  0x58(%rbp),%xmm8
movsd  0x50(%rbp),%xmm8
movsd  0x48(%rbp),%xmm8
movsd  0x40(%rbp),%xmm8
movsd  0x38(%rbp),%xmm8
movsd  0x30(%rbp),%xmm8
movsd  0x28(%rbp),%xmm8
movsd  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  %xmm3,-0x20(%rbp)
movsd  %xmm4,-0x28(%rbp)
movsd  %xmm5,-0x30(%rbp)
movsd  %xmm6,-0x38(%rbp)
movsd  %xmm7,-0x40(%rbp)
mov    %rdi,-0x48(%rbp)
movsd  0xf0(%rbp),%xmm0
movsd  0x100(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm3
movsd  0x108(%rbp),%xmm2
mulsd  -0x10(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x140(%rbp),%xmm2
movsd  0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x148(%rbp),%xmm1
movsd  0x18(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x110(%rbp),%xmm2
movsd  -0x18(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x118(%rbp),%xmm1
movsd  -0x20(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x140(%rbp),%xmm2
movsd  0x20(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x148(%rbp),%xmm1
movsd  0x28(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xf0(%rbp),%xmm0
movsd  0x100(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm3
movsd  0x108(%rbp),%xmm2
mulsd  -0x30(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x140(%rbp),%xmm2
movsd  0x30(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x148(%rbp),%xmm1
movsd  0x38(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x110(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x118(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x140(%rbp),%xmm2
movsd  0x40(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x148(%rbp),%xmm1
movsd  0x48(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xf0(%rbp),%xmm0
movsd  0x100(%rbp),%xmm1
movsd  0x50(%rbp),%xmm3
movsd  0x108(%rbp),%xmm2
mulsd  0x58(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x140(%rbp),%xmm2
movsd  0x90(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x148(%rbp),%xmm1
movsd  0x98(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x110(%rbp),%xmm2
movsd  0x60(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x118(%rbp),%xmm1
movsd  0x68(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x140(%rbp),%xmm2
movsd  0xa0(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x148(%rbp),%xmm1
movsd  0xa8(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xf0(%rbp),%xmm0
movsd  0x100(%rbp),%xmm1
movsd  0x70(%rbp),%xmm3
movsd  0x108(%rbp),%xmm2
mulsd  0x78(%rbp),%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x140(%rbp),%xmm2
movsd  0xb0(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x148(%rbp),%xmm1
movsd  0xb8(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x110(%rbp),%xmm2
movsd  0x80(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x118(%rbp),%xmm1
movsd  0x88(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0x140(%rbp),%xmm2
movsd  0xc0(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x148(%rbp),%xmm1
movsd  0xc8(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0x120(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  0x128(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x140(%rbp),%xmm1
movsd  0xd0(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x148(%rbp),%xmm0
movsd  0xd8(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0x130(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  0x138(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x140(%rbp),%xmm1
movsd  0xe0(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x148(%rbp),%xmm0
movsd  0xe8(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xf8(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<deriche>:
movsd  0xe8(%rsp),%xmm10
movsd  0x110(%rsp),%xmm11
movsd  0x108(%rsp),%xmm12
movsd  0x140(%rsp),%xmm8
movsd  0x138(%rsp),%xmm9
movsd  0xf8(%rsp),%xmm13
movsd  0x100(%rsp),%xmm14
mulsd  %xmm14,%xmm1
mulsd  %xmm13,%xmm0
addsd  %xmm1,%xmm0
movsd  0x8(%rsp),%xmm1
mulsd  %xmm9,%xmm1
addsd  %xmm0,%xmm1
movsd  0x10(%rsp),%xmm0
mulsd  %xmm8,%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm12,%xmm2
addsd  %xmm0,%xmm2
mulsd  %xmm11,%xmm3
addsd  %xmm2,%xmm3
movsd  0x18(%rsp),%xmm1
mulsd  %xmm9,%xmm1
addsd  %xmm3,%xmm1
movsd  0x20(%rsp),%xmm0
mulsd  %xmm8,%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm10,%xmm0
mulsd  %xmm14,%xmm5
mulsd  %xmm13,%xmm4
addsd  %xmm5,%xmm4
movsd  0x28(%rsp),%xmm1
mulsd  %xmm9,%xmm1
addsd  %xmm4,%xmm1
movsd  0x30(%rsp),%xmm2
mulsd  %xmm8,%xmm2
addsd  %xmm1,%xmm2
mulsd  %xmm12,%xmm6
addsd  %xmm2,%xmm6
mulsd  %xmm11,%xmm7
addsd  %xmm6,%xmm7
movsd  0x38(%rsp),%xmm2
mulsd  %xmm9,%xmm2
addsd  %xmm7,%xmm2
movsd  0x40(%rsp),%xmm1
mulsd  %xmm8,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm10,%xmm1
movsd  0x50(%rsp),%xmm2
mulsd  %xmm14,%xmm2
movsd  0x48(%rsp),%xmm3
mulsd  %xmm13,%xmm3
addsd  %xmm2,%xmm3
movsd  0x88(%rsp),%xmm2
mulsd  %xmm9,%xmm2
addsd  %xmm3,%xmm2
movsd  0x90(%rsp),%xmm3
mulsd  %xmm8,%xmm3
addsd  %xmm2,%xmm3
movsd  0x58(%rsp),%xmm2
mulsd  %xmm12,%xmm2
addsd  %xmm3,%xmm2
movsd  0x60(%rsp),%xmm3
mulsd  %xmm11,%xmm3
addsd  %xmm2,%xmm3
movsd  0x98(%rsp),%xmm4
mulsd  %xmm9,%xmm4
addsd  %xmm3,%xmm4
movsd  0xa0(%rsp),%xmm2
mulsd  %xmm8,%xmm2
addsd  %xmm4,%xmm2
mulsd  %xmm10,%xmm2
mulsd  0x70(%rsp),%xmm14
mulsd  0x68(%rsp),%xmm13
addsd  %xmm14,%xmm13
movsd  0xa8(%rsp),%xmm3
mulsd  %xmm9,%xmm3
addsd  %xmm13,%xmm3
movsd  0xb0(%rsp),%xmm4
mulsd  %xmm8,%xmm4
addsd  %xmm3,%xmm4
mulsd  0x78(%rsp),%xmm12
addsd  %xmm4,%xmm12
mulsd  0x80(%rsp),%xmm11
addsd  %xmm12,%xmm11
movsd  0xb8(%rsp),%xmm3
mulsd  %xmm9,%xmm3
addsd  %xmm11,%xmm3
movsd  0xc0(%rsp),%xmm4
mulsd  %xmm8,%xmm4
addsd  %xmm3,%xmm4
mulsd  %xmm10,%xmm4
mulsd  0x120(%rsp),%xmm1
mulsd  0x118(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  0xc8(%rsp),%xmm1
mulsd  %xmm9,%xmm1
addsd  %xmm0,%xmm1
movsd  0xd0(%rsp),%xmm0
mulsd  %xmm8,%xmm0
mulsd  0x130(%rsp),%xmm4
mulsd  0x128(%rsp),%xmm2
addsd  %xmm1,%xmm0
addsd  %xmm4,%xmm2
mulsd  0xd8(%rsp),%xmm9
addsd  %xmm2,%xmm9
mulsd  0xe0(%rsp),%xmm8
addsd  %xmm9,%xmm8
addsd  %xmm0,%xmm8
mulsd  0xf0(%rsp),%xmm8
movsd  %xmm8,(%rdi)
ret

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

LLVM IR (-O2):
define void @deriche(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, double %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, double %37, double %38, double %39, double %40, double %41, double %42, double %43, double %44, double %45, double %46, double %47, double* nocapture writeonly %48) {
%50 = fmul double %1, %39
%51 = tail call double @llvm.fmuladd.f64(double %38, double %0, double %50)
%52 = tail call double @llvm.fmuladd.f64(double %46, double %8, double %51)
%53 = tail call double @llvm.fmuladd.f64(double %47, double %9, double %52)
%54 = tail call double @llvm.fmuladd.f64(double %40, double %2, double %53)
%55 = tail call double @llvm.fmuladd.f64(double %41, double %3, double %54)
%56 = tail call double @llvm.fmuladd.f64(double %46, double %10, double %55)
%57 = tail call double @llvm.fmuladd.f64(double %47, double %11, double %56)
%58 = fmul double %57, %36
%59 = fmul double %5, %39
%60 = tail call double @llvm.fmuladd.f64(double %38, double %4, double %59)
%61 = tail call double @llvm.fmuladd.f64(double %46, double %12, double %60)
%62 = tail call double @llvm.fmuladd.f64(double %47, double %13, double %61)
%63 = tail call double @llvm.fmuladd.f64(double %40, double %6, double %62)
%64 = tail call double @llvm.fmuladd.f64(double %41, double %7, double %63)
%65 = tail call double @llvm.fmuladd.f64(double %46, double %14, double %64)
%66 = tail call double @llvm.fmuladd.f64(double %47, double %15, double %65)
%67 = fmul double %66, %36
%68 = fmul double %17, %39
%69 = tail call double @llvm.fmuladd.f64(double %38, double %16, double %68)
%70 = tail call double @llvm.fmuladd.f64(double %46, double %24, double %69)
%71 = tail call double @llvm.fmuladd.f64(double %47, double %25, double %70)
%72 = tail call double @llvm.fmuladd.f64(double %40, double %18, double %71)
%73 = tail call double @llvm.fmuladd.f64(double %41, double %19, double %72)
%74 = tail call double @llvm.fmuladd.f64(double %46, double %26, double %73)
%75 = tail call double @llvm.fmuladd.f64(double %47, double %27, double %74)
%76 = fmul double %75, %36
%77 = fmul double %21, %39
%78 = tail call double @llvm.fmuladd.f64(double %38, double %20, double %77)
%79 = tail call double @llvm.fmuladd.f64(double %46, double %28, double %78)
%80 = tail call double @llvm.fmuladd.f64(double %47, double %29, double %79)
%81 = tail call double @llvm.fmuladd.f64(double %40, double %22, double %80)
%82 = tail call double @llvm.fmuladd.f64(double %41, double %23, double %81)
%83 = tail call double @llvm.fmuladd.f64(double %46, double %30, double %82)
%84 = tail call double @llvm.fmuladd.f64(double %47, double %31, double %83)
%85 = fmul double %84, %36
%86 = fmul double %67, %43
%87 = tail call double @llvm.fmuladd.f64(double %42, double %58, double %86)
%88 = tail call double @llvm.fmuladd.f64(double %46, double %32, double %87)
%89 = tail call double @llvm.fmuladd.f64(double %47, double %33, double %88)
%90 = fmul double %85, %45
%91 = tail call double @llvm.fmuladd.f64(double %44, double %76, double %90)
%92 = tail call double @llvm.fmuladd.f64(double %46, double %34, double %91)
%93 = tail call double @llvm.fmuladd.f64(double %47, double %35, double %92)
%94 = fadd double %89, %93
%95 = fmul double %94, %37
store double %95, double* %48
ret void
}