void scalars_nonewald_poly_full(int version, double r, double aa, double ab,
                                double *scalar) {
  int i;
  for (i = 0; i < 44; i++)
    scalar[i] = 0.0;
  double r2 = r * r;
  double aa2 = aa * aa;
  double ab2 = ab * ab;
  double aa3 = aa2 * aa;
  double ab3 = ab2 * ab;
  scalar[0] = 1.0 / aa;
  scalar[1] = (1.5 - (aa2 + ab2) * 0.5 / r2) / r;
  scalar[2] = scalar[1];
  scalar[3] = 1.0 / ab;
  scalar[4] = 1.0 / aa;
  scalar[5] = (0.75 + (aa2 + ab2) * 0.25 / r2) / r;
  scalar[6] = scalar[5];
  scalar[7] = 1.0 / ab;
  if (version == 0)
    return;
  scalar[9] = -0.75 / r2;
  scalar[10] = scalar[9];
  scalar[12] = 0.75 / aa3;
  scalar[13] = 0.75 / r2 / r;
  scalar[14] = scalar[13];
  scalar[15] = 0.75 / ab3;
  scalar[16] = 0.75 / aa3;
  scalar[17] = -3.0 / 8.0 / r2 / r;
  scalar[18] = scalar[17];
  scalar[19] = 0.75 / ab3;
  if (version == 1)
    return;
  scalar[21] = (2.25 - 13.5 * (aa2 / 10.0 + ab2 / 6.0) / r2) / r2;
  scalar[22] = (2.25 - 13.5 * (ab2 / 10.0 + aa2 / 6.0) / r2) / r2;
  scalar[25] = 4.5 * (aa2 / 10.0 + ab2 / 6.0) / r2 / r2;
  scalar[26] = 4.5 * (ab2 / 10.0 + aa2 / 6.0) / r2 / r2;
  scalar[29] = -9.0 / 8.0 / r2 / r;
  scalar[30] = scalar[29];
  scalar[32] = 0.9 / aa3;
  scalar[33] = (-4.5 + 5.4 * (aa2 + ab2) / r2) / r2 / r;
  scalar[34] = scalar[33];
  scalar[35] = 0.9 / ab3;
  scalar[36] = 0.9 / aa3;
  scalar[37] = (2.25 - 3.6 * (aa2 + ab2) / r2) / r2 / r;
  scalar[38] = scalar[37];
  scalar[39] = 0.9 / ab3;
  scalar[40] = 0.9 / aa3;
  scalar[41] = 0.9 * (aa2 + ab2) / r2 / r2 / r;
  scalar[42] = scalar[41];
  scalar[43] = 0.9 / ab3;
}


x86 assembly (clang, -O0):
<scalars_nonewald_poly_full>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
mov    %rsi,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpl   $0x2c,-0x2c(%rbp)
jge    1149 <scalars_nonewald_poly_full+0x49>
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1121 <scalars_nonewald_poly_full+0x21>
movsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x18(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x20(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe64(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x40(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
movsd  0xe65(%rip),%xmm0
mulsd  %xmm0,%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0xe4c(%rip),%xmm0
subsd  %xmm1,%xmm0
divsd  -0x10(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  0xe08(%rip),%xmm0
divsd  -0x20(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  0xdf2(%rip),%xmm0
divsd  -0x18(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x40(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
movsd  0xde2(%rip),%xmm0
mulsd  %xmm0,%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0xdc9(%rip),%xmm0
addsd  %xmm1,%xmm0
divsd  -0x10(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  0xd95(%rip),%xmm0
divsd  -0x20(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x38(%rax)
cmpl   $0x0,-0x4(%rbp)
jne    1288 <scalars_nonewald_poly_full+0x188>
jmp    1677 <scalars_nonewald_poly_full+0x577>
movsd  0xda0(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x28(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  0xd50(%rip),%xmm0
divsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  0xd3a(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x28(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  0xd0d(%rip),%xmm0
divsd  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x78(%rax)
movsd  0xcf7(%rip),%xmm0
divsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x80(%rax)
movsd  0xcfe(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x88(%rax)
mov    -0x28(%rbp),%rax
movsd  0x88(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x90(%rax)
movsd  0xca8(%rip),%xmm0
divsd  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x98(%rax)
cmpl   $0x1,-0x4(%rbp)
jne    1380 <scalars_nonewald_poly_full+0x280>
jmp    1677 <scalars_nonewald_poly_full+0x577>
movsd  -0x40(%rbp),%xmm0
movsd  0xceb(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x48(%rbp),%xmm1
movsd  0xcd2(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xcd2(%rip),%xmm1
mulsd  %xmm0,%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0xc81(%rip),%xmm0
subsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0xa8(%rax)
movsd  -0x48(%rbp),%xmm0
movsd  0xc97(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  0xc7e(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  0xc7e(%rip),%xmm1
mulsd  %xmm0,%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0xc2d(%rip),%xmm0
subsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0xb0(%rax)
movsd  -0x40(%rbp),%xmm1
movsd  0xc43(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  0xc2a(%rip),%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm0,%xmm1
movsd  0xc12(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0xc8(%rax)
movsd  -0x48(%rbp),%xmm1
movsd  0xbfb(%rip),%xmm0
divsd  %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  0xbe2(%rip),%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm0,%xmm1
movsd  0xbca(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0xd0(%rax)
movsd  0xba0(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0xe8(%rax)
mov    -0x28(%rbp),%rax
movsd  0xe8(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0xf0(%rax)
movsd  0xb42(%rip),%xmm0
divsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x100(%rax)
movsd  -0x40(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  0xb3f(%rip),%xmm1
mulsd  %xmm0,%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0xb26(%rip),%xmm0
addsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x108(%rax)
mov    -0x28(%rbp),%rax
movsd  0x108(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x110(%rax)
movsd  0xad4(%rip),%xmm0
divsd  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x118(%rax)
movsd  0xabb(%rip),%xmm0
divsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x120(%rax)
movsd  -0x40(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  0xaa8(%rip),%xmm1
mulsd  %xmm0,%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0xa8f(%rip),%xmm0
subsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x128(%rax)
mov    -0x28(%rbp),%rax
movsd  0x128(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x130(%rax)
movsd  0xa4d(%rip),%xmm0
divsd  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x138(%rax)
movsd  0xa34(%rip),%xmm0
divsd  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x140(%rax)
movsd  -0x40(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
movsd  0xa11(%rip),%xmm0
mulsd  %xmm1,%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
divsd  -0x10(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x148(%rax)
mov    -0x28(%rbp),%rax
movsd  0x148(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x150(%rax)
movsd  0x9d2(%rip),%xmm0
divsd  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x158(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<scalars_nonewald_poly_full>:
push   %rbp
push   %rbx
sub    $0x38,%rsp
mov    %rsi,%rbx
movaps %xmm2,0x20(%rsp)
movaps %xmm1,0x10(%rsp)
movaps %xmm0,(%rsp)
mov    %edi,%ebp
lea    0x40(%rsi),%rdi
mov    $0x120,%edx
xor    %esi,%esi
call   1030 <memset@plt>
movapd 0x20(%rsp),%xmm7
movapd 0x10(%rsp),%xmm9
movapd (%rsp),%xmm8
movapd %xmm8,%xmm0
mulsd  %xmm8,%xmm0
movapd %xmm9,%xmm2
mulsd  %xmm9,%xmm2
movapd %xmm7,%xmm3
mulsd  %xmm7,%xmm3
movapd %xmm2,%xmm1
addsd  %xmm3,%xmm1
movsd  0xe88(%rip),%xmm4
mulsd  %xmm1,%xmm4
divsd  %xmm0,%xmm4
addsd  0xe80(%rip),%xmm4
movapd 0xed0(%rip),%xmm5
unpcklpd %xmm4,%xmm5
movapd %xmm9,%xmm4
unpcklpd %xmm8,%xmm4
divpd  %xmm4,%xmm5
movupd %xmm5,(%rbx)
movsd  0xe62(%rip),%xmm4
mulsd  %xmm1,%xmm4
divsd  %xmm0,%xmm4
addsd  0xe5a(%rip),%xmm4
shufpd $0x2,0xea9(%rip),%xmm4
movapd %xmm8,%xmm6
unpcklpd %xmm7,%xmm6
divpd  %xmm6,%xmm4
movapd %xmm5,%xmm6
unpckhpd %xmm4,%xmm6
movupd %xmm6,0x10(%rbx)
unpcklpd %xmm4,%xmm5
movupd %xmm5,0x20(%rbx)
movupd %xmm4,0x30(%rbx)
test   %ebp,%ebp
je     13c5 <scalars_nonewald_poly_full+0x2b5>
mulsd  %xmm3,%xmm7
mulsd  %xmm2,%xmm9
movsd  0xe18(%rip),%xmm4
divsd  %xmm0,%xmm4
movsd  %xmm4,0x48(%rbx)
movsd  %xmm4,0x50(%rbx)
movsd  0xdfa(%rip),%xmm4
divsd  %xmm0,%xmm4
movapd 0xe56(%rip),%xmm5
unpcklpd %xmm4,%xmm5
unpcklpd %xmm8,%xmm9
divpd  %xmm9,%xmm5
movupd %xmm5,0x60(%rbx)
movsd  0xde3(%rip),%xmm6
divsd  %xmm0,%xmm6
shufpd $0x2,0xe3e(%rip),%xmm6
movapd %xmm8,%xmm4
unpcklpd %xmm7,%xmm4
divpd  %xmm4,%xmm6
movapd %xmm5,%xmm7
unpckhpd %xmm6,%xmm7
movupd %xmm7,0x70(%rbx)
unpcklpd %xmm6,%xmm5
movupd %xmm5,0x80(%rbx)
movupd %xmm6,0x90(%rbx)
cmp    $0x1,%ebp
je     13c5 <scalars_nonewald_poly_full+0x2b5>
unpcklpd %xmm3,%xmm3
divpd  0xe0b(%rip),%xmm3
unpcklpd %xmm2,%xmm2
divpd  0xe0f(%rip),%xmm2
addpd  %xmm3,%xmm2
movapd 0xe13(%rip),%xmm3
mulpd  %xmm2,%xmm3
movapd %xmm0,%xmm5
unpcklpd %xmm0,%xmm5
divpd  %xmm5,%xmm3
addpd  0xe0b(%rip),%xmm3
divpd  %xmm5,%xmm3
movupd %xmm3,0xa8(%rbx)
mulpd  0xe07(%rip),%xmm2
divpd  %xmm5,%xmm2
divpd  %xmm5,%xmm2
movupd %xmm2,0xc8(%rbx)
movsd  0xd3f(%rip),%xmm2
divsd  %xmm0,%xmm2
divsd  %xmm8,%xmm2
movsd  %xmm2,0xe8(%rbx)
movsd  %xmm2,0xf0(%rbx)
movsd  0xd26(%rip),%xmm2
mulsd  %xmm1,%xmm2
divsd  %xmm0,%xmm2
addsd  0xd1e(%rip),%xmm2
divsd  %xmm0,%xmm2
movapd 0xdc2(%rip),%xmm3
unpcklpd %xmm2,%xmm3
movsd  0xd0e(%rip),%xmm2
mulsd  %xmm1,%xmm2
divsd  %xmm0,%xmm2
addsd  0xd06(%rip),%xmm2
divpd  %xmm9,%xmm3
divsd  %xmm0,%xmm2
shufpd $0x2,0xda4(%rip),%xmm2
movupd %xmm3,0x100(%rbx)
divpd  %xmm4,%xmm2
movapd %xmm3,%xmm4
unpckhpd %xmm2,%xmm4
movupd %xmm4,0x110(%rbx)
movapd %xmm3,%xmm4
unpcklpd %xmm2,%xmm4
movupd %xmm4,0x120(%rbx)
movupd %xmm2,0x130(%rbx)
movlpd %xmm3,0x140(%rbx)
mulsd  0xcb8(%rip),%xmm1
divsd  %xmm0,%xmm1
divsd  %xmm0,%xmm1
divsd  %xmm8,%xmm1
movsd  %xmm1,0x148(%rbx)
movsd  %xmm1,0x150(%rbx)
movhpd %xmm2,0x158(%rbx)
add    $0x38,%rsp
pop    %rbx
pop    %rbp
ret

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

LLVM IR (-O2):
define void @scalars_nonewald_poly_full(i32 %0, double %1, double %2, double %3, double* writeonly %4) {
%6 = getelementptr inbounds double, double* %4, i64 8
%7 = bitcast double* %6 to i8*
%8 = fmul double %1, %1
%9 = fmul double %2, %2
%10 = fmul double %3, %3
%11 = fadd double %9, %10
%12 = fmul double %11, 5.000000e-01
%13 = fdiv double %12, %8
%14 = fsub double 1.500000e+00, %13
%15 = insertelement <2 x double> <double 1.000000e+00, double poison>, double %14, i64 1
%16 = insertelement <2 x double> poison, double %2, i64 0
%17 = insertelement <2 x double> %16, double %1, i64 1
%18 = fdiv <2 x double> %15, %17
%19 = bitcast double* %4 to <2 x double>*
store <2 x double> %18, <2 x double>* %19
%20 = getelementptr inbounds double, double* %4, i64 2
%21 = extractelement <2 x double> %18, i64 1
store double %21, double* %20
%22 = getelementptr inbounds double, double* %4, i64 3
%23 = fmul double %11, 2.500000e-01
%24 = fdiv double %23, %8
%25 = fadd double %24, 7.500000e-01
%26 = insertelement <2 x double> <double poison, double 1.000000e+00>, double %25, i64 0
%27 = insertelement <2 x double> poison, double %1, i64 0
%28 = insertelement <2 x double> %27, double %3, i64 1
%29 = fdiv <2 x double> %26, %28
%30 = extractelement <2 x double> %29, i64 1
store double %30, double* %22
%31 = getelementptr inbounds double, double* %4, i64 4
%32 = extractelement <2 x double> %18, i64 0
store double %32, double* %31
%33 = getelementptr inbounds double, double* %4, i64 5
%34 = extractelement <2 x double> %29, i64 0
store double %34, double* %33
%35 = getelementptr inbounds double, double* %4, i64 6
%36 = bitcast double* %35 to <2 x double>*
store <2 x double> %29, <2 x double>* %36
%37 = icmp eq i32 %0, 0
br i1 %37, label %123, label %38
38: ; preds = %5
%39 = fmul double %10, %3
%40 = fmul double %9, %2
%41 = fdiv double -7.500000e-01, %8
%42 = getelementptr inbounds double, double* %4, i64 9
store double %41, double* %42
%43 = getelementptr inbounds double, double* %4, i64 10
store double %41, double* %43
%44 = getelementptr inbounds double, double* %4, i64 12
%45 = fdiv double 7.500000e-01, %8
%46 = insertelement <2 x double> <double 7.500000e-01, double poison>, double %45, i64 1
%47 = insertelement <2 x double> poison, double %1, i64 1
%48 = insertelement <2 x double> %47, double %40, i64 0
%49 = fdiv <2 x double> %46, %48
%50 = bitcast double* %44 to <2 x double>*
store <2 x double> %49, <2 x double>* %50
%51 = getelementptr inbounds double, double* %4, i64 14
%52 = extractelement <2 x double> %49, i64 1
store double %52, double* %51
%53 = getelementptr inbounds double, double* %4, i64 15
%54 = fdiv double -3.750000e-01, %8
%55 = insertelement <2 x double> <double poison, double 7.500000e-01>, double %54, i64 0
%56 = insertelement <2 x double> %27, double %39, i64 1
%57 = fdiv <2 x double> %55, %56
%58 = extractelement <2 x double> %57, i64 1
store double %58, double* %53
%59 = getelementptr inbounds double, double* %4, i64 16
%60 = extractelement <2 x double> %49, i64 0
store double %60, double* %59
%61 = getelementptr inbounds double, double* %4, i64 17
%62 = extractelement <2 x double> %57, i64 0
store double %62, double* %61
%63 = getelementptr inbounds double, double* %4, i64 18
%64 = bitcast double* %63 to <2 x double>*
store <2 x double> %57, <2 x double>* %64
%65 = icmp eq i32 %0, 1
br i1 %65, label %123, label %66
66: ; preds = %38
%67 = getelementptr inbounds double, double* %4, i64 21
%68 = insertelement <2 x double> poison, double %10, i64 0
%69 = shufflevector <2 x double> %68, <2 x double> poison, <2 x i32> zeroinitializer
%70 = fdiv <2 x double> %69, <double 6.000000e+00, double 1.000000e+01>
%71 = insertelement <2 x double> poison, double %9, i64 0
%72 = shufflevector <2 x double> %71, <2 x double> poison, <2 x i32> zeroinitializer
%73 = fdiv <2 x double> %72, <double 1.000000e+01, double 6.000000e+00>
%74 = fadd <2 x double> %73, %70
%75 = fmul <2 x double> %74, <double 1.350000e+01, double 1.350000e+01>
%76 = insertelement <2 x double> poison, double %8, i64 0
%77 = shufflevector <2 x double> %76, <2 x double> poison, <2 x i32> zeroinitializer
%78 = fdiv <2 x double> %75, %77
%79 = fsub <2 x double> <double 2.250000e+00, double 2.250000e+00>, %78
%80 = fdiv <2 x double> %79, %77
%81 = bitcast double* %67 to <2 x double>*
store <2 x double> %80, <2 x double>* %81
%82 = getelementptr inbounds double, double* %4, i64 25
%83 = fmul <2 x double> %74, <double 4.500000e+00, double 4.500000e+00>
%84 = fdiv <2 x double> %83, %77
%85 = fdiv <2 x double> %84, %77
%86 = bitcast double* %82 to <2 x double>*
store <2 x double> %85, <2 x double>* %86
%87 = fdiv double -1.125000e+00, %8
%88 = fdiv double %87, %1
%89 = getelementptr inbounds double, double* %4, i64 29
store double %88, double* %89
%90 = getelementptr inbounds double, double* %4, i64 30
store double %88, double* %90
%91 = getelementptr inbounds double, double* %4, i64 32
%92 = fmul double %11, 5.400000e+00
%93 = fdiv double %92, %8
%94 = fadd double %93, -4.500000e+00
%95 = fdiv double %94, %8
%96 = insertelement <2 x double> <double 9.000000e-01, double poison>, double %95, i64 1
%97 = fdiv <2 x double> %96, %48
%98 = bitcast double* %91 to <2 x double>*
store <2 x double> %97, <2 x double>* %98
%99 = getelementptr inbounds double, double* %4, i64 34
%100 = extractelement <2 x double> %97, i64 1
store double %100, double* %99
%101 = getelementptr inbounds double, double* %4, i64 35
%102 = fmul double %11, 3.600000e+00
%103 = fdiv double %102, %8
%104 = fsub double 2.250000e+00, %103
%105 = fdiv double %104, %8
%106 = insertelement <2 x double> <double poison, double 9.000000e-01>, double %105, i64 0
%107 = fdiv <2 x double> %106, %56
%108 = extractelement <2 x double> %107, i64 1
store double %108, double* %101
%109 = getelementptr inbounds double, double* %4, i64 36
%110 = extractelement <2 x double> %97, i64 0
store double %110, double* %109
%111 = getelementptr inbounds double, double* %4, i64 37
%112 = extractelement <2 x double> %107, i64 0
store double %112, double* %111
%113 = getelementptr inbounds double, double* %4, i64 38
%114 = bitcast double* %113 to <2 x double>*
store <2 x double> %107, <2 x double>* %114
%115 = getelementptr inbounds double, double* %4, i64 40
store double %110, double* %115
%116 = fmul double %11, 9.000000e-01
%117 = fdiv double %116, %8
%118 = fdiv double %117, %8
%119 = fdiv double %118, %1
%120 = getelementptr inbounds double, double* %4, i64 41
store double %119, double* %120
%121 = getelementptr inbounds double, double* %4, i64 42
store double %119, double* %121
%122 = getelementptr inbounds double, double* %4, i64 43
store double %108, double* %122
br label %123
123: ; preds = %38, %5, %66
ret void
}