double FDM_7_Reconstruct1d(const double vmmm, const double vmm, const double vm,
                           const double v, const double vp, const double vpp,
                           const double vppp, const double ummm,
                           const double umm, const double um, const double u,
                           const double up, const double upp,
                           const double uppp) {
  double hn, hp, dflux;
  hn = (-3 * vmmm + 25 * vmm - 101 * vm + 319 * v + 214 * vp - 38 * vpp +
        4 * vppp) /
       420;
  hp = (4 * ummm - 38 * umm + 214 * um + 319 * u - 101 * up + 25 * upp -
        3 * uppp) /
       420;
  dflux = (hn + hp);
  return dflux;
}


x86 assembly (clang, -O0):
<FDM_7_Reconstruct1d>:
push   %rbp
mov    %rsp,%rbp
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)
movsd  -0x8(%rbp),%xmm1
movsd  0xeb3(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  0xe9e(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x18(%rbp),%xmm0
movsd  0xe99(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp),%xmm1
movsd  0xe8c(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x28(%rbp),%xmm0
movsd  0xe7f(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  0xe82(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x38(%rbp),%xmm0
movsd  0xe5d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xe1d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  0xe3f(%rip),%xmm0
mulsd  0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xe13(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x18(%rbp),%xmm0
movsd  0xdf6(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x20(%rbp),%xmm1
movsd  0xdd9(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x28(%rbp),%xmm0
movsd  0xdbc(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0x30(%rbp),%xmm1
movsd  0xd9f(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x38(%rbp),%xmm0
movsd  0xd82(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xd6a(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<FDM_7_Reconstruct1d>:
movhpd 0x8(%rsp),%xmm1
mulpd  0xef2(%rip),%xmm1
unpcklpd %xmm7,%xmm0
mulpd  0xef6(%rip),%xmm0
movhpd 0x10(%rsp),%xmm2
addpd  %xmm1,%xmm0
mulpd  0xef4(%rip),%xmm2
addpd  %xmm2,%xmm0
movhpd 0x18(%rsp),%xmm3
mulpd  0xef2(%rip),%xmm3
movhpd 0x20(%rsp),%xmm4
mulpd  0xef4(%rip),%xmm4
addpd  %xmm3,%xmm0
addpd  %xmm4,%xmm0
movhpd 0x28(%rsp),%xmm5
mulpd  0xeee(%rip),%xmm5
movhpd 0x30(%rsp),%xmm6
addpd  %xmm5,%xmm0
mulpd  0xeec(%rip),%xmm6
addpd  %xmm6,%xmm0
divpd  0xef0(%rip),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
addsd  %xmm1,%xmm0
ret

LLVM IR (-O0):
define double @FDM_7_Reconstruct1d(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) {
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
store double %0, double* %15
store double %1, double* %16
store double %2, double* %17
store double %3, double* %18
store double %4, double* %19
store double %5, double* %20
store double %6, double* %21
store double %7, double* %22
store double %8, double* %23
store double %9, double* %24
store double %10, double* %25
store double %11, double* %26
store double %12, double* %27
store double %13, double* %28
%32 = load double, double* %15
%33 = load double, double* %16
%34 = fmul double 2.500000e+01, %33
%35 = call double @llvm.fmuladd.f64(double -3.000000e+00, double %32, double %34)
%36 = load double, double* %17
%37 = call double @llvm.fmuladd.f64(double -1.010000e+02, double %36, double %35)
%38 = load double, double* %18
%39 = call double @llvm.fmuladd.f64(double 3.190000e+02, double %38, double %37)
%40 = load double, double* %19
%41 = call double @llvm.fmuladd.f64(double 2.140000e+02, double %40, double %39)
%42 = load double, double* %20
%43 = call double @llvm.fmuladd.f64(double -3.800000e+01, double %42, double %41)
%44 = load double, double* %21
%45 = call double @llvm.fmuladd.f64(double 4.000000e+00, double %44, double %43)
%46 = fdiv double %45, 4.200000e+02
store double %46, double* %29
%47 = load double, double* %22
%48 = load double, double* %23
%49 = fmul double 3.800000e+01, %48
%50 = fneg double %49
%51 = call double @llvm.fmuladd.f64(double 4.000000e+00, double %47, double %50)
%52 = load double, double* %24
%53 = call double @llvm.fmuladd.f64(double 2.140000e+02, double %52, double %51)
%54 = load double, double* %25
%55 = call double @llvm.fmuladd.f64(double 3.190000e+02, double %54, double %53)
%56 = load double, double* %26
%57 = call double @llvm.fmuladd.f64(double -1.010000e+02, double %56, double %55)
%58 = load double, double* %27
%59 = call double @llvm.fmuladd.f64(double 2.500000e+01, double %58, double %57)
%60 = load double, double* %28
%61 = call double @llvm.fmuladd.f64(double -3.000000e+00, double %60, double %59)
%62 = fdiv double %61, 4.200000e+02
store double %62, double* %30
%63 = load double, double* %29
%64 = load double, double* %30
%65 = fadd double %63, %64
store double %65, double* %31
%66 = load double, double* %31
ret double %66
}

LLVM IR (-O2):
define double @FDM_7_Reconstruct1d(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) {
%15 = insertelement <2 x double> poison, double %1, i64 0
%16 = insertelement <2 x double> %15, double %8, i64 1
%17 = fmul <2 x double> %16, <double 2.500000e+01, double -3.800000e+01>
%18 = insertelement <2 x double> poison, double %0, i64 0
%19 = insertelement <2 x double> %18, double %7, i64 1
%20 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %19, <2 x double> <double -3.000000e+00, double 4.000000e+00>, <2 x double> %17)
%21 = insertelement <2 x double> poison, double %2, i64 0
%22 = insertelement <2 x double> %21, double %9, i64 1
%23 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %22, <2 x double> <double -1.010000e+02, double 2.140000e+02>, <2 x double> %20)
%24 = insertelement <2 x double> poison, double %3, i64 0
%25 = insertelement <2 x double> %24, double %10, i64 1
%26 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %25, <2 x double> <double 3.190000e+02, double 3.190000e+02>, <2 x double> %23)
%27 = insertelement <2 x double> poison, double %4, i64 0
%28 = insertelement <2 x double> %27, double %11, i64 1
%29 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %28, <2 x double> <double 2.140000e+02, double -1.010000e+02>, <2 x double> %26)
%30 = insertelement <2 x double> poison, double %5, i64 0
%31 = insertelement <2 x double> %30, double %12, i64 1
%32 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %31, <2 x double> <double -3.800000e+01, double 2.500000e+01>, <2 x double> %29)
%33 = insertelement <2 x double> poison, double %6, i64 0
%34 = insertelement <2 x double> %33, double %13, i64 1
%35 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %34, <2 x double> <double 4.000000e+00, double -3.000000e+00>, <2 x double> %32)
%36 = fdiv <2 x double> %35, <double 4.200000e+02, double 4.200000e+02>
%37 = shufflevector <2 x double> %36, <2 x double> poison, <2 x i32> <i32 1, i32 undef>
%38 = fadd <2 x double> %36, %37
%39 = extractelement <2 x double> %38, i64 0
ret double %39
}