void interpolate_eps_derivative_order2_square(double epsilon, double eta,
                                              double *out_4655011469098782191) {
  out_4655011469098782191[0] = 0.25 * epsilon * eta * (eta - 1.0) +
                               0.25 * eta * (epsilon - 1.0) * (eta - 1.0);
  out_4655011469098782191[1] = -0.5 * eta * (epsilon - 1.0) * (eta - 1.0) -
                               0.5 * eta * (epsilon + 1.0) * (eta - 1.0);
  out_4655011469098782191[2] = 0.25 * epsilon * eta * (eta - 1.0) +
                               0.25 * eta * (epsilon + 1.0) * (eta - 1.0);
  out_4655011469098782191[3] =
      -0.5 * epsilon * (eta - 1.0) * (eta + 1.0) -
      0.5 * (epsilon - 1.0) * (eta - 1.0) * (eta + 1.0);
  out_4655011469098782191[4] =
      1.0 * (epsilon - 1.0) * (eta - 1.0) * (eta + 1.0) +
      1.0 * (epsilon + 1.0) * (eta - 1.0) * (eta + 1.0);
  out_4655011469098782191[5] =
      -0.5 * epsilon * (eta - 1.0) * (eta + 1.0) -
      0.5 * (epsilon + 1.0) * (eta - 1.0) * (eta + 1.0);
  out_4655011469098782191[6] = 0.25 * epsilon * eta * (eta + 1.0) +
                               0.25 * eta * (epsilon - 1.0) * (eta + 1.0);
  out_4655011469098782191[7] = -0.5 * eta * (epsilon - 1.0) * (eta + 1.0) -
                               0.5 * eta * (epsilon + 1.0) * (eta + 1.0);
  out_4655011469098782191[8] = 0.25 * epsilon * eta * (eta + 1.0) +
                               0.25 * eta * (epsilon + 1.0) * (eta + 1.0);
}


x86 assembly (clang, -O0):
<interpolate_eps_derivative_order2_square>:
push   %rbp
mov    %rsp,%rbp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
movsd  0xeee(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0xecf(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  0xecb(%rip),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm3
movsd  0xeb1(%rip),%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
movsd  -0x10(%rbp),%xmm3
movsd  0xe9c(%rip),%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0xe94(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm1
movsd  0xe6a(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0xe55(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  0xe59(%rip),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xe3c(%rip),%xmm3
addsd  -0x8(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movsd  -0x10(%rbp),%xmm3
movsd  0xe26(%rip),%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  0xdf6(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm2
movsd  0xdd7(%rip),%xmm1
subsd  %xmm1,%xmm2
movsd  0xdd3(%rip),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xdbe(%rip),%xmm3
addsd  -0x8(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movsd  -0x10(%rbp),%xmm3
movsd  0xda8(%rip),%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  0xd9f(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
movsd  0xd75(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd65(%rip),%xmm2
addsd  -0x10(%rbp),%xmm2
movsd  -0x8(%rbp),%xmm3
movsd  0xd53(%rip),%xmm1
subsd  %xmm1,%xmm3
movsd  0xd57(%rip),%xmm1
mulsd  %xmm3,%xmm1
movsd  -0x10(%rbp),%xmm3
movsd  0xd36(%rip),%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
movsd  0xd26(%rip),%xmm3
addsd  -0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x8(%rbp),%xmm1
movsd  0xce8(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xcdc(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  -0x10(%rbp),%xmm1
movsd  0xccb(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcbb(%rip),%xmm2
addsd  -0x10(%rbp),%xmm2
movsd  0xcae(%rip),%xmm3
addsd  -0x8(%rbp),%xmm3
movsd  0xca1(%rip),%xmm1
mulsd  %xmm3,%xmm1
movsd  -0x10(%rbp),%xmm3
movsd  0xc90(%rip),%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
movsd  0xc80(%rip),%xmm3
addsd  -0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  0xc76(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
movsd  0xc4c(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc3c(%rip),%xmm2
addsd  -0x10(%rbp),%xmm2
movsd  0xc2f(%rip),%xmm3
addsd  -0x8(%rbp),%xmm3
movsd  0xc32(%rip),%xmm1
mulsd  %xmm3,%xmm1
movsd  -0x10(%rbp),%xmm3
movsd  0xc11(%rip),%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
movsd  0xc01(%rip),%xmm3
addsd  -0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  0xbd0(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  0xbb6(%rip),%xmm2
addsd  -0x10(%rbp),%xmm2
movsd  0xbb1(%rip),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm3
movsd  0xb97(%rip),%xmm4
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
movsd  0xb87(%rip),%xmm3
addsd  -0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  0xb7d(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm1
movsd  0xb53(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb43(%rip),%xmm2
addsd  -0x10(%rbp),%xmm2
movsd  0xb46(%rip),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xb29(%rip),%xmm3
addsd  -0x8(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movsd  0xb18(%rip),%xmm3
addsd  -0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  0xae7(%rip),%xmm0
mulsd  -0x8(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  0xacd(%rip),%xmm2
addsd  -0x10(%rbp),%xmm2
movsd  0xac8(%rip),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xab3(%rip),%xmm3
addsd  -0x8(%rbp),%xmm3
mulsd  %xmm3,%xmm1
movsd  0xaa2(%rip),%xmm3
addsd  -0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<interpolate_eps_derivative_order2_square>:
movapd %xmm0,%xmm2
unpcklpd %xmm1,%xmm2
movapd 0xef0(%rip),%xmm6
mulpd  %xmm6,%xmm2
movapd %xmm0,%xmm3
unpcklpd %xmm0,%xmm3
movapd 0xeec(%rip),%xmm7
addpd  %xmm7,%xmm3
movapd %xmm1,%xmm5
unpcklpd %xmm3,%xmm5
movapd %xmm2,%xmm8
mulpd  %xmm5,%xmm8
mulpd  %xmm6,%xmm5
movsd  %xmm5,%xmm2
mulpd  %xmm3,%xmm2
unpcklpd %xmm1,%xmm1
addpd  %xmm7,%xmm1
movapd %xmm1,%xmm6
unpcklpd %xmm1,%xmm6
movapd %xmm8,%xmm10
mulpd  %xmm6,%xmm10
movapd %xmm3,%xmm7
unpckhpd %xmm3,%xmm7
movsd  0xeaf(%rip),%xmm9
mulsd  %xmm9,%xmm0
movapd %xmm3,%xmm4
unpcklpd %xmm0,%xmm4
movapd %xmm3,%xmm0
mulpd  %xmm6,%xmm4
mulsd  %xmm9,%xmm7
shufpd $0x1,%xmm7,%xmm3
mulpd  %xmm6,%xmm3
mulpd  %xmm2,%xmm6
addpd  %xmm6,%xmm10
movupd %xmm10,(%rdi)
shufpd $0x1,%xmm1,%xmm0
mulpd  %xmm5,%xmm0
movapd %xmm1,%xmm5
mulpd  %xmm0,%xmm5
movapd %xmm4,%xmm6
movsd  %xmm8,%xmm6
mulpd  %xmm1,%xmm6
addpd  %xmm5,%xmm6
movupd %xmm6,0x10(%rdi)
unpckhpd %xmm1,%xmm1
mulpd  %xmm1,%xmm3
mulpd  %xmm1,%xmm4
addpd  %xmm3,%xmm4
movupd %xmm4,0x20(%rdi)
mulpd  %xmm1,%xmm2
movapd %xmm8,%xmm3
mulpd  %xmm1,%xmm3
addpd  %xmm2,%xmm3
movupd %xmm3,0x30(%rdi)
mulsd  %xmm1,%xmm0
mulsd  %xmm8,%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x40(%rdi)
ret

LLVM IR (-O0):
define void @interpolate_eps_derivative_order2_square(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* %4
%8 = fmul double 2.500000e-01, %7
%9 = load double, double* %5
%10 = fmul double %8, %9
%11 = load double, double* %5
%12 = fsub double %11, 1.000000e+00
%13 = load double, double* %5
%14 = fmul double 2.500000e-01, %13
%15 = load double, double* %4
%16 = fsub double %15, 1.000000e+00
%17 = fmul double %14, %16
%18 = load double, double* %5
%19 = fsub double %18, 1.000000e+00
%20 = fmul double %17, %19
%21 = call double @llvm.fmuladd.f64(double %10, double %12, double %20)
%22 = load double*, double** %6
%23 = getelementptr inbounds double, double* %22, i64 0
store double %21, double* %23
%24 = load double, double* %5
%25 = fmul double -5.000000e-01, %24
%26 = load double, double* %4
%27 = fsub double %26, 1.000000e+00
%28 = fmul double %25, %27
%29 = load double, double* %5
%30 = fsub double %29, 1.000000e+00
%31 = load double, double* %5
%32 = fmul double 5.000000e-01, %31
%33 = load double, double* %4
%34 = fadd double %33, 1.000000e+00
%35 = fmul double %32, %34
%36 = load double, double* %5
%37 = fsub double %36, 1.000000e+00
%38 = fmul double %35, %37
%39 = fneg double %38
%40 = call double @llvm.fmuladd.f64(double %28, double %30, double %39)
%41 = load double*, double** %6
%42 = getelementptr inbounds double, double* %41, i64 1
store double %40, double* %42
%43 = load double, double* %4
%44 = fmul double 2.500000e-01, %43
%45 = load double, double* %5
%46 = fmul double %44, %45
%47 = load double, double* %5
%48 = fsub double %47, 1.000000e+00
%49 = load double, double* %5
%50 = fmul double 2.500000e-01, %49
%51 = load double, double* %4
%52 = fadd double %51, 1.000000e+00
%53 = fmul double %50, %52
%54 = load double, double* %5
%55 = fsub double %54, 1.000000e+00
%56 = fmul double %53, %55
%57 = call double @llvm.fmuladd.f64(double %46, double %48, double %56)
%58 = load double*, double** %6
%59 = getelementptr inbounds double, double* %58, i64 2
store double %57, double* %59
%60 = load double, double* %4
%61 = fmul double -5.000000e-01, %60
%62 = load double, double* %5
%63 = fsub double %62, 1.000000e+00
%64 = fmul double %61, %63
%65 = load double, double* %5
%66 = fadd double %65, 1.000000e+00
%67 = load double, double* %4
%68 = fsub double %67, 1.000000e+00
%69 = fmul double 5.000000e-01, %68
%70 = load double, double* %5
%71 = fsub double %70, 1.000000e+00
%72 = fmul double %69, %71
%73 = load double, double* %5
%74 = fadd double %73, 1.000000e+00
%75 = fmul double %72, %74
%76 = fneg double %75
%77 = call double @llvm.fmuladd.f64(double %64, double %66, double %76)
%78 = load double*, double** %6
%79 = getelementptr inbounds double, double* %78, i64 3
store double %77, double* %79
%80 = load double, double* %4
%81 = fsub double %80, 1.000000e+00
%82 = fmul double 1.000000e+00, %81
%83 = load double, double* %5
%84 = fsub double %83, 1.000000e+00
%85 = fmul double %82, %84
%86 = load double, double* %5
%87 = fadd double %86, 1.000000e+00
%88 = load double, double* %4
%89 = fadd double %88, 1.000000e+00
%90 = fmul double 1.000000e+00, %89
%91 = load double, double* %5
%92 = fsub double %91, 1.000000e+00
%93 = fmul double %90, %92
%94 = load double, double* %5
%95 = fadd double %94, 1.000000e+00
%96 = fmul double %93, %95
%97 = call double @llvm.fmuladd.f64(double %85, double %87, double %96)
%98 = load double*, double** %6
%99 = getelementptr inbounds double, double* %98, i64 4
store double %97, double* %99
%100 = load double, double* %4
%101 = fmul double -5.000000e-01, %100
%102 = load double, double* %5
%103 = fsub double %102, 1.000000e+00
%104 = fmul double %101, %103
%105 = load double, double* %5
%106 = fadd double %105, 1.000000e+00
%107 = load double, double* %4
%108 = fadd double %107, 1.000000e+00
%109 = fmul double 5.000000e-01, %108
%110 = load double, double* %5
%111 = fsub double %110, 1.000000e+00
%112 = fmul double %109, %111
%113 = load double, double* %5
%114 = fadd double %113, 1.000000e+00
%115 = fmul double %112, %114
%116 = fneg double %115
%117 = call double @llvm.fmuladd.f64(double %104, double %106, double %116)
%118 = load double*, double** %6
%119 = getelementptr inbounds double, double* %118, i64 5
store double %117, double* %119
%120 = load double, double* %4
%121 = fmul double 2.500000e-01, %120
%122 = load double, double* %5
%123 = fmul double %121, %122
%124 = load double, double* %5
%125 = fadd double %124, 1.000000e+00
%126 = load double, double* %5
%127 = fmul double 2.500000e-01, %126
%128 = load double, double* %4
%129 = fsub double %128, 1.000000e+00
%130 = fmul double %127, %129
%131 = load double, double* %5
%132 = fadd double %131, 1.000000e+00
%133 = fmul double %130, %132
%134 = call double @llvm.fmuladd.f64(double %123, double %125, double %133)
%135 = load double*, double** %6
%136 = getelementptr inbounds double, double* %135, i64 6
store double %134, double* %136
%137 = load double, double* %5
%138 = fmul double -5.000000e-01, %137
%139 = load double, double* %4
%140 = fsub double %139, 1.000000e+00
%141 = fmul double %138, %140
%142 = load double, double* %5
%143 = fadd double %142, 1.000000e+00
%144 = load double, double* %5
%145 = fmul double 5.000000e-01, %144
%146 = load double, double* %4
%147 = fadd double %146, 1.000000e+00
%148 = fmul double %145, %147
%149 = load double, double* %5
%150 = fadd double %149, 1.000000e+00
%151 = fmul double %148, %150
%152 = fneg double %151
%153 = call double @llvm.fmuladd.f64(double %141, double %143, double %152)
%154 = load double*, double** %6
%155 = getelementptr inbounds double, double* %154, i64 7
store double %153, double* %155
%156 = load double, double* %4
%157 = fmul double 2.500000e-01, %156
%158 = load double, double* %5
%159 = fmul double %157, %158
%160 = load double, double* %5
%161 = fadd double %160, 1.000000e+00
%162 = load double, double* %5
%163 = fmul double 2.500000e-01, %162
%164 = load double, double* %4
%165 = fadd double %164, 1.000000e+00
%166 = fmul double %163, %165
%167 = load double, double* %5
%168 = fadd double %167, 1.000000e+00
%169 = fmul double %166, %168
%170 = call double @llvm.fmuladd.f64(double %159, double %161, double %169)
%171 = load double*, double** %6
%172 = getelementptr inbounds double, double* %171, i64 8
store double %170, double* %172
ret void
}

LLVM IR (-O2):
define void @interpolate_eps_derivative_order2_square(double %0, double %1, double* nocapture writeonly %2) {
%4 = insertelement <2 x double> poison, double %0, i64 0
%5 = insertelement <2 x double> %4, double %1, i64 1
%6 = fmul <2 x double> %5, <double 2.500000e-01, double -5.000000e-01>
%7 = shufflevector <2 x double> %4, <2 x double> poison, <2 x i32> zeroinitializer
%8 = fadd <2 x double> %7, <double -1.000000e+00, double 1.000000e+00>
%9 = insertelement <2 x double> poison, double %1, i64 0
%10 = shufflevector <2 x double> %9, <2 x double> %8, <2 x i32> <i32 0, i32 2>
%11 = fmul <2 x double> %6, %10
%12 = fmul <2 x double> %10, <double 2.500000e-01, double -5.000000e-01>
%13 = shufflevector <2 x double> %12, <2 x double> %6, <2 x i32> <i32 0, i32 3>
%14 = fmul <2 x double> %8, %13
%15 = shufflevector <2 x double> %9, <2 x double> poison, <2 x i32> zeroinitializer
%16 = fadd <2 x double> %15, <double -1.000000e+00, double 1.000000e+00>
%17 = shufflevector <2 x double> %16, <2 x double> undef, <2 x i32> zeroinitializer
%18 = fmul <2 x double> %17, %14
%19 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %11, <2 x double> %17, <2 x double> %18)
%20 = bitcast double* %2 to <2 x double>*
store <2 x double> %19, <2 x double>* %20
%21 = extractelement <2 x double> %8, i64 1
%22 = extractelement <2 x double> %11, i64 0
%23 = getelementptr inbounds double, double* %2, i64 2
%24 = fmul double %0, -5.000000e-01
%25 = shufflevector <2 x double> %8, <2 x double> undef, <2 x i32> <i32 1, i32 undef>
%26 = shufflevector <2 x double> %25, <2 x double> %16, <2 x i32> <i32 0, i32 2>
%27 = fmul <2 x double> %26, %12
%28 = fmul <2 x double> %16, %27
%29 = insertelement <2 x double> %8, double %24, i64 1
%30 = fmul <2 x double> %29, %17
%31 = shufflevector <2 x double> %11, <2 x double> %30, <2 x i32> <i32 0, i32 3>
%32 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %31, <2 x double> %16, <2 x double> %28)
%33 = bitcast double* %23 to <2 x double>*
store <2 x double> %32, <2 x double>* %33
%34 = extractelement <2 x double> %16, i64 1
%35 = getelementptr inbounds double, double* %2, i64 4
%36 = fmul double %21, -5.000000e-01
%37 = insertelement <2 x double> %25, double %36, i64 1
%38 = fmul <2 x double> %37, %17
%39 = shufflevector <2 x double> %16, <2 x double> undef, <2 x i32> <i32 1, i32 1>
%40 = fmul <2 x double> %39, %38
%41 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %30, <2 x double> %39, <2 x double> %40)
%42 = bitcast double* %35 to <2 x double>*
store <2 x double> %41, <2 x double>* %42
%43 = getelementptr inbounds double, double* %2, i64 6
%44 = fmul <2 x double> %39, %14
%45 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %11, <2 x double> %39, <2 x double> %44)
%46 = bitcast double* %43 to <2 x double>*
store <2 x double> %45, <2 x double>* %46
%47 = extractelement <2 x double> %27, i64 0
%48 = fmul double %34, %47
%49 = tail call double @llvm.fmuladd.f64(double %22, double %34, double %48)
%50 = getelementptr inbounds double, double* %2, i64 8
store double %49, double* %50
ret void
}