double quad_eval(const double coef[((3) * (3) * (3))], const double r[3]) {
  double lr0[3], lr1[3], lr2[3];
  unsigned d;
  for (d = 0; d < 3; ++d)
    lr0[d] = r[d] * (r[d] - 1) / 2, lr1[d] = (1 + r[d]) * (1 - r[d]),
    lr2[d] = r[d] * (r[d] + 1) / 2;
  return (((coef[0] * lr0[0] + coef[0 + 1] * lr1[0] + coef[0 + 2] * lr2[0]) *
               lr0[1] +
           (coef[0 + 3] * lr0[0] + coef[0 + 3 + 1] * lr1[0] +
            coef[0 + 3 + 2] * lr2[0]) *
               lr1[1] +
           (coef[0 + 6] * lr0[0] + coef[0 + 6 + 1] * lr1[0] +
            coef[0 + 6 + 2] * lr2[0]) *
               lr2[1]) *
              lr0[2] +
          ((coef[0 + 9] * lr0[0] + coef[0 + 9 + 1] * lr1[0] +
            coef[0 + 9 + 2] * lr2[0]) *
               lr0[1] +
           (coef[0 + 9 + 3] * lr0[0] + coef[0 + 9 + 3 + 1] * lr1[0] +
            coef[0 + 9 + 3 + 2] * lr2[0]) *
               lr1[1] +
           (coef[0 + 9 + 6] * lr0[0] + coef[0 + 9 + 6 + 1] * lr1[0] +
            coef[0 + 9 + 6 + 2] * lr2[0]) *
               lr2[1]) *
              lr1[2] +
          ((coef[0 + 18] * lr0[0] + coef[0 + 18 + 1] * lr1[0] +
            coef[0 + 18 + 2] * lr2[0]) *
               lr0[1] +
           (coef[0 + 18 + 3] * lr0[0] + coef[0 + 18 + 3 + 1] * lr1[0] +
            coef[0 + 18 + 3 + 2] * lr2[0]) *
               lr1[1] +
           (coef[0 + 18 + 6] * lr0[0] + coef[0 + 18 + 6 + 1] * lr1[0] +
            coef[0 + 18 + 6 + 2] * lr2[0]) *
               lr2[1]) *
              lr2[2]);
}


x86 assembly (clang, -O0):
<quad_eval>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x74(%rbp)
cmpl   $0x3,-0x74(%rbp)
jae    11d6 <quad_eval+0xd6>
mov    -0x10(%rbp),%rax
mov    -0x74(%rbp),%ecx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x74(%rbp),%ecx
movsd  (%rax,%rcx,8),%xmm1
movsd  0xecb(%rip),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xeb3(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x74(%rbp),%eax
movsd  %xmm0,-0x30(%rbp,%rax,8)
mov    -0x10(%rbp),%rax
mov    -0x74(%rbp),%ecx
movsd  0xe9f(%rip),%xmm0
addsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x74(%rbp),%ecx
movsd  0xe8b(%rip),%xmm1
subsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x74(%rbp),%eax
movsd  %xmm0,-0x50(%rbp,%rax,8)
mov    -0x10(%rbp),%rax
mov    -0x74(%rbp),%ecx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x74(%rbp),%ecx
movsd  0xe5e(%rip),%xmm1
addsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe45(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x74(%rbp),%eax
movsd  %xmm0,-0x70(%rbp,%rax,8)
mov    -0x74(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x74(%rbp)
jmp    1113 <quad_eval+0x13>
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x30(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x70(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x18(%rax),%xmm3
movsd  -0x30(%rbp),%xmm4
mov    -0x8(%rbp),%rax
movsd  0x20(%rax),%xmm1
mulsd  -0x50(%rbp),%xmm1
mulsd  %xmm4,%xmm3
addsd  %xmm1,%xmm3
mov    -0x8(%rbp),%rax
movsd  0x28(%rax),%xmm1
movsd  -0x70(%rbp),%xmm4
mulsd  %xmm4,%xmm1
addsd  %xmm3,%xmm1
mulsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x30(%rax),%xmm2
movsd  -0x30(%rbp),%xmm3
mov    -0x8(%rbp),%rax
movsd  0x38(%rax),%xmm1
mulsd  -0x50(%rbp),%xmm1
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
mov    -0x8(%rbp),%rax
movsd  0x40(%rax),%xmm1
movsd  -0x70(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  -0x68(%rbp),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x20(%rbp),%xmm2
mov    -0x8(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x30(%rbp),%xmm4
mov    -0x8(%rbp),%rax
movsd  0x50(%rax),%xmm3
mulsd  -0x50(%rbp),%xmm3
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
mov    -0x8(%rbp),%rax
movsd  0x58(%rax),%xmm3
movsd  -0x70(%rbp),%xmm4
mulsd  %xmm4,%xmm3
addsd  %xmm0,%xmm3
movsd  -0x28(%rbp),%xmm4
mov    -0x8(%rbp),%rax
movsd  0x60(%rax),%xmm5
movsd  -0x30(%rbp),%xmm6
mov    -0x8(%rbp),%rax
movsd  0x68(%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  %xmm6,%xmm5
addsd  %xmm0,%xmm5
mov    -0x8(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x70(%rbp),%xmm6
mulsd  %xmm6,%xmm0
addsd  %xmm5,%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  %xmm4,%xmm3
addsd  %xmm0,%xmm3
mov    -0x8(%rbp),%rax
movsd  0x78(%rax),%xmm4
movsd  -0x30(%rbp),%xmm5
mov    -0x8(%rbp),%rax
movsd  0x80(%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  %xmm5,%xmm4
addsd  %xmm0,%xmm4
mov    -0x8(%rbp),%rax
movsd  0x88(%rax),%xmm0
movsd  -0x70(%rbp),%xmm5
mulsd  %xmm5,%xmm0
addsd  %xmm4,%xmm0
movsd  -0x68(%rbp),%xmm4
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movsd  0x90(%rax),%xmm0
movsd  -0x30(%rbp),%xmm3
mov    -0x8(%rbp),%rax
movsd  0x98(%rax),%xmm2
mulsd  -0x50(%rbp),%xmm2
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
mov    -0x8(%rbp),%rax
movsd  0xa0(%rax),%xmm2
movsd  -0x70(%rbp),%xmm3
mulsd  %xmm3,%xmm2
addsd  %xmm0,%xmm2
movsd  -0x28(%rbp),%xmm3
mov    -0x8(%rbp),%rax
movsd  0xa8(%rax),%xmm4
movsd  -0x30(%rbp),%xmm5
mov    -0x8(%rbp),%rax
movsd  0xb0(%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  %xmm5,%xmm4
addsd  %xmm0,%xmm4
mov    -0x8(%rbp),%rax
movsd  0xb8(%rax),%xmm0
movsd  -0x70(%rbp),%xmm5
mulsd  %xmm5,%xmm0
addsd  %xmm4,%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  %xmm3,%xmm2
addsd  %xmm0,%xmm2
mov    -0x8(%rbp),%rax
movsd  0xc0(%rax),%xmm3
movsd  -0x30(%rbp),%xmm4
mov    -0x8(%rbp),%rax
movsd  0xc8(%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
mulsd  %xmm4,%xmm3
addsd  %xmm0,%xmm3
mov    -0x8(%rbp),%rax
movsd  0xd0(%rax),%xmm0
movsd  -0x70(%rbp),%xmm4
mulsd  %xmm4,%xmm0
addsd  %xmm3,%xmm0
movsd  -0x68(%rbp),%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
movsd  -0x60(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<quad_eval>:
movsd  (%rsi),%xmm3
movsd  0x8(%rsi),%xmm4
movsd  0xeef(%rip),%xmm6
movapd %xmm3,%xmm1
addsd  %xmm6,%xmm1
mulsd  %xmm3,%xmm1
movsd  0xee3(%rip),%xmm5
mulsd  %xmm5,%xmm1
movsd  0xede(%rip),%xmm12
movapd %xmm3,%xmm0
addsd  %xmm12,%xmm0
movapd %xmm12,%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm3,%xmm0
mulsd  %xmm5,%xmm0
movapd %xmm4,%xmm10
addsd  %xmm6,%xmm10
mulsd  %xmm4,%xmm10
mulsd  %xmm5,%xmm10
movapd %xmm4,%xmm11
addsd  %xmm12,%xmm11
movapd %xmm12,%xmm8
subsd  %xmm4,%xmm8
mulsd  %xmm11,%xmm8
mulsd  %xmm4,%xmm11
mulsd  %xmm5,%xmm11
movsd  0x10(%rsi),%xmm4
addsd  %xmm4,%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm5,%xmm6
movapd %xmm4,%xmm9
addsd  %xmm12,%xmm9
subsd  %xmm4,%xmm12
mulsd  %xmm9,%xmm12
mulsd  %xmm4,%xmm9
mulsd  %xmm5,%xmm9
movsd  0x8(%rdi),%xmm4
mulsd  %xmm2,%xmm4
movsd  (%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  0x10(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0x20(%rdi),%xmm5
mulsd  %xmm2,%xmm5
movsd  0x18(%rdi),%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm5,%xmm3
movsd  0x28(%rdi),%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm3,%xmm5
mulsd  %xmm8,%xmm5
mulsd  %xmm10,%xmm4
addsd  %xmm5,%xmm4
movsd  0x38(%rdi),%xmm3
mulsd  %xmm2,%xmm3
movsd  0x30(%rdi),%xmm7
mulsd  %xmm1,%xmm7
addsd  %xmm3,%xmm7
movsd  0x40(%rdi),%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm7,%xmm5
mulsd  %xmm11,%xmm5
addsd  %xmm4,%xmm5
mulsd  %xmm6,%xmm5
movsd  0x50(%rdi),%xmm3
mulsd  %xmm2,%xmm3
movsd  0x48(%rdi),%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm3,%xmm6
movsd  0x58(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm6,%xmm4
movsd  0x68(%rdi),%xmm3
mulsd  %xmm2,%xmm3
movsd  0x60(%rdi),%xmm6
mulsd  %xmm1,%xmm6
addsd  %xmm3,%xmm6
movsd  0x70(%rdi),%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm6,%xmm3
mulsd  %xmm8,%xmm3
mulsd  %xmm10,%xmm4
addsd  %xmm3,%xmm4
movsd  0x80(%rdi),%xmm3
mulsd  %xmm2,%xmm3
movsd  0x78(%rdi),%xmm7
mulsd  %xmm1,%xmm7
addsd  %xmm3,%xmm7
movsd  0x88(%rdi),%xmm6
mulsd  %xmm0,%xmm6
addsd  %xmm7,%xmm6
mulsd  %xmm11,%xmm6
addsd  %xmm4,%xmm6
mulsd  %xmm12,%xmm6
addsd  %xmm5,%xmm6
movsd  0x98(%rdi),%xmm3
mulsd  %xmm2,%xmm3
movsd  0x90(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm3,%xmm5
movsd  0xa0(%rdi),%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm5,%xmm4
movsd  0xb0(%rdi),%xmm3
mulsd  %xmm2,%xmm3
movsd  0xa8(%rdi),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm3,%xmm5
movsd  0xb8(%rdi),%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm5,%xmm3
mulsd  %xmm8,%xmm3
mulsd  %xmm10,%xmm4
addsd  %xmm3,%xmm4
mulsd  0xc8(%rdi),%xmm2
mulsd  0xc0(%rdi),%xmm1
addsd  %xmm2,%xmm1
mulsd  0xd0(%rdi),%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm11,%xmm0
addsd  %xmm4,%xmm0
mulsd  %xmm9,%xmm0
addsd  %xmm6,%xmm0
ret

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

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