double MiltersenSchwartz(int fCall, double Pt, double FT, double X, double t1,
                         double T2, double vS, double vE, double vf,
                         double rhoSe, double rhoSf, double rhoef, double kE,
                         double kF) {
  double result;
  const double ekEt1 = exp(kE * t1);
  const double ekFt1 = exp(kF * t1);
  const double emkET2 = exp(-kE * T2);
  const double emkFt1 = exp(-kF * t1);
  const double emkFT2 = exp(-kF * T2);
  const double nkF = 1.0 / kF;
  const double nkE = 1.0 / kE;
  const double nemkFt1 = 1.0 - emkFt1;
  const double kEF = kE + kF;
  const double ekEt1m1 = ekEt1 - 1.0;
  const double ekFt1m1 = ekFt1 - 1.0;
  const double nff = nkF * emkFT2 * ekFt1m1;
  const double tkF = 2.0 * kF;
  const double tkE = 2.0 * kE;
  const double vz =
      ((vS) * (vS)) * t1 +
      2.0 * vS *
          (vf * rhoSf * nkF * (t1 - nff) -
           vE * rhoSe * nkE * (t1 - nkE * emkET2 * ekEt1m1)) +
      ((vE) * (vE)) * 1.0 / ((kE) * (kE)) *
          (t1 + 1.0 / (tkE)*exp(-tkE * T2) * (exp(tkE * t1) - 1.0) -
           2.0 * nkE * emkET2 * ekEt1m1) +
      ((vf) * (vf)) * 1.0 / ((kF) * (kF)) *
          (t1 + (1.0 / tkF) * exp(-tkF * T2) * (exp(tkF * t1) - 1.0) -
           2.0 * nff) -
      2.0 * vE * vf * rhoef * nkE * nkF *
          (t1 - (nkE * emkET2 * ekEt1m1) - nff +
           ((1.0 / kEF) * exp(-kEF * T2) * (exp(kEF * t1) - 1.0)));
  const double vxz = vf * nkF *
                     (vS * rhoSf * (t1 - nkF * nemkFt1) +
                      vf * nkF *
                          (t1 - nff - nkF * nemkFt1 +
                           ((1.0 / tkF) * emkFT2 * (ekFt1 - emkFt1))) -
                      vE * rhoef * nkE *
                          (t1 - nkE * emkET2 * ekEt1m1 - nkF * nemkFt1 +
                           1.0 / kEF * emkET2 * (ekEt1 - emkFt1)));
  const double sqrtvz = sqrt(vz);
  const double logFTX = log(FT / X);
  const double vz2 = vz / 2.0;
  const double d1 = (logFTX - vxz + vz2) / sqrtvz;
  const double d2 = (logFTX - vxz - vz2) / sqrtvz;
  if (fCall)
    result = Pt * (FT * exp(-vxz) * cnd(d1) - X * cnd(d2));
  else
    result = Pt * (X * cnd(-d2) - FT * exp(-vxz) * cnd(-d1));
  return result;
}


x86 assembly (clang, -O0):
<MiltersenSchwartz>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1c0,%rsp
movsd  0x30(%rbp),%xmm8
movsd  0x28(%rbp),%xmm8
movsd  0x20(%rbp),%xmm8
movsd  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
mov    %edi,-0x4(%rbp)
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
movsd  %xmm5,-0x38(%rbp)
movsd  %xmm6,-0x40(%rbp)
movsd  %xmm7,-0x48(%rbp)
movsd  0x28(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  0x30(%rbp),%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  0x28(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x28(%rbp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,-0x70(%rbp)
movsd  0x30(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,-0x78(%rbp)
movsd  0xdc3(%rip),%xmm0
divsd  0x30(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xdb1(%rip),%xmm0
divsd  0x28(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xd9c(%rip),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0x28(%rbp),%xmm0
addsd  0x30(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  0xd70(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  0xd57(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xd21(%rip),%xmm0
mulsd  0x30(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0xd0c(%rip),%xmm0
mulsd  0x28(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
movsd  -0x38(%rbp),%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  0xce8(%rip),%xmm1
mulsd  -0x38(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm3
mulsd  0x18(%rbp),%xmm3
mulsd  -0x80(%rbp),%xmm3
movsd  -0x28(%rbp),%xmm5
subsd  -0xb0(%rbp),%xmm5
ff
movsd  -0x40(%rbp),%xmm4
mulsd  0x10(%rbp),%xmm4
mulsd  -0x88(%rbp),%xmm4
ff
movsd  -0x28(%rbp),%xmm7
movsd  -0x88(%rbp),%xmm6
ff
mulsd  -0x68(%rbp),%xmm6
movsd  -0xa0(%rbp),%xmm8
ff ff
movq   %xmm6,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm6
mulsd  %xmm8,%xmm6
addsd  %xmm7,%xmm6
mulsd  %xmm6,%xmm4
movq   %xmm4,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  0xc39(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x28(%rbp),%xmm1
mulsd  0x28(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  0xc0a(%rip),%xmm0
divsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x170(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
call   1030 <exp@plt>
movsd  -0x168(%rbp),%xmm3
ff
movsd  -0x160(%rbp),%xmm2
ff
movsd  -0x158(%rbp),%xmm1
ff
movaps %xmm0,%xmm4
movsd  -0x150(%rbp),%xmm0
ff
movsd  0xb7d(%rip),%xmm5
subsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm3
addsd  %xmm2,%xmm3
movsd  0xb61(%rip),%xmm2
mulsd  -0x88(%rbp),%xmm2
ff
mulsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm4
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  0xb13(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x30(%rbp),%xmm1
mulsd  0x30(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
movsd  0xae4(%rip),%xmm0
divsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x148(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
call   1030 <exp@plt>
movsd  -0x140(%rbp),%xmm2
ff
movsd  -0x138(%rbp),%xmm3
ff
movsd  -0x130(%rbp),%xmm1
ff
movaps %xmm0,%xmm4
movsd  -0x128(%rbp),%xmm0
ff
movsd  0xa57(%rip),%xmm5
subsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movsd  -0xb0(%rbp),%xmm3
ff
addsd  %xmm3,%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  0xa1b(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
mulsd  0x20(%rbp),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x28(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x68(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  0x9ae(%rip),%xmm0
divsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0x30(%rbp),%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x120(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
mulsd  -0x28(%rbp),%xmm0
call   1030 <exp@plt>
movsd  -0x118(%rbp),%xmm2
ff
movsd  -0x110(%rbp),%xmm3
ff
movsd  -0x108(%rbp),%xmm1
ff
movaps %xmm0,%xmm4
movsd  -0x100(%rbp),%xmm0
ff
movsd  0x921(%rip),%xmm5
subsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
mulsd  0x18(%rbp),%xmm2
movsd  -0x28(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm3
movsd  -0x90(%rbp),%xmm4
ff
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm4,%xmm3
addsd  %xmm1,%xmm3
movsd  -0x48(%rbp),%xmm1
mulsd  -0x80(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm4
subsd  -0xb0(%rbp),%xmm4
ff
movsd  -0x80(%rbp),%xmm5
movsd  -0x90(%rbp),%xmm6
ff
movq   %xmm5,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm5
mulsd  %xmm6,%xmm5
addsd  %xmm4,%xmm5
movsd  0x85e(%rip),%xmm4
divsd  -0xb8(%rbp),%xmm4
ff
mulsd  -0x78(%rbp),%xmm4
movsd  -0x60(%rbp),%xmm6
subsd  -0x70(%rbp),%xmm6
mulsd  %xmm6,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm1
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  0x20(%rbp),%xmm1
mulsd  -0x88(%rbp),%xmm1
ff
movsd  -0x28(%rbp),%xmm4
movsd  -0x88(%rbp),%xmm3
ff
mulsd  -0x68(%rbp),%xmm3
movsd  -0xa0(%rbp),%xmm5
movq   %xmm3,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
movsd  -0x80(%rbp),%xmm4
movsd  -0x90(%rbp),%xmm5
ff
movq   %xmm4,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
mulsd  %xmm5,%xmm4
addsd  %xmm3,%xmm4
movsd  0x7b4(%rip),%xmm3
divsd  -0x98(%rbp),%xmm3
ff
mulsd  -0x68(%rbp),%xmm3
movsd  -0x58(%rbp),%xmm5
subsd  -0x70(%rbp),%xmm5
mulsd  %xmm5,%xmm3
addsd  %xmm4,%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
call   1060 <sqrt@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
call   1040 <log@plt>
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movsd  0x726(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
subsd  -0xd0(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
divsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
subsd  -0xd0(%rbp),%xmm0
ff
subsd  -0xe8(%rbp),%xmm0
ff
divsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
cmpl   $0x0,-0x4(%rbp)
je     1a21 <MiltersenSchwartz+0x8e1>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x198(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
mov    $0x1,%al
call   1050 <cnd@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
mov    $0x1,%al
call   1050 <cnd@plt>
movsd  -0x190(%rbp),%xmm2
ff
movsd  -0x188(%rbp),%xmm1
ff
movsd  -0x180(%rbp),%xmm3
ff
movsd  -0x178(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm4
mulsd  %xmm4,%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    1b2b <MiltersenSchwartz+0x9eb>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    $0x1,%al
call   1050 <cnd@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1030 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x1c0(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    $0x1,%al
call   1050 <cnd@plt>
movsd  -0x1b8(%rbp),%xmm2
ff
movsd  -0x1b0(%rbp),%xmm1
ff
movsd  -0x1a8(%rbp),%xmm3
ff
movsd  -0x1a0(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm4
mulsd  %xmm4,%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
add    $0x1c0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<MiltersenSchwartz>:
push   %rbx
sub    $0x120,%rsp
movsd  %xmm7,0x60(%rsp)
movsd  %xmm6,0x90(%rsp)
movsd  %xmm5,0xa0(%rsp)
movsd  %xmm4,0x10(%rsp)
movsd  %xmm3,(%rsp)
movsd  %xmm2,0x38(%rsp)
movsd  %xmm1,0x30(%rsp)
movsd  %xmm0,0xe8(%rsp)
mov    %edi,%ebx
movsd  0x148(%rsp),%xmm1
movapd %xmm3,%xmm0
mulsd  %xmm1,%xmm0
call   1030 <exp@plt>
movsd  %xmm0,0xb8(%rsp)
movsd  (%rsp),%xmm0
movsd  0x150(%rsp),%xmm1
mulsd  %xmm1,%xmm0
call   1030 <exp@plt>
movapd %xmm0,0x20(%rsp)
movsd  0x148(%rsp),%xmm0
xorpd  0xe31(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,0x68(%rsp)
movsd  0x150(%rsp),%xmm0
xorpd  0xe0f(%rip),%xmm0
movapd %xmm0,0x70(%rsp)
mulsd  (%rsp),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,0xb0(%rsp)
movapd 0x70(%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1030 <exp@plt>
movapd %xmm0,%xmm2
movsd  %xmm0,0xd8(%rsp)
movsd  0xde0(%rip),%xmm1
movapd %xmm1,%xmm0
movsd  0x150(%rsp),%xmm6
divsd  %xmm6,%xmm0
movapd %xmm0,%xmm5
movapd %xmm1,%xmm0
movsd  0x148(%rsp),%xmm7
divsd  %xmm7,%xmm0
movapd %xmm0,%xmm3
movsd  %xmm0,0x98(%rsp)
movapd %xmm1,%xmm0
movapd %xmm1,%xmm8
movsd  %xmm1,0x70(%rsp)
subsd  0xb0(%rsp),%xmm0
movsd  %xmm0,0xe0(%rsp)
movapd %xmm7,%xmm0
movapd %xmm7,%xmm4
addsd  %xmm6,%xmm0
movapd %xmm0,0xf0(%rsp)
movapd %xmm6,%xmm9
movsd  0xd72(%rip),%xmm1
movsd  0xb8(%rsp),%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,%xmm7
movsd  %xmm0,0x40(%rsp)
movapd 0x20(%rsp),%xmm0
addsd  %xmm1,%xmm0
movapd %xmm5,0x110(%rsp)
movapd %xmm5,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm1,%xmm6
movapd %xmm1,0x100(%rsp)
movapd %xmm9,%xmm0
addsd  %xmm9,%xmm0
movapd %xmm0,0xc0(%rsp)
movapd %xmm4,%xmm9
addsd  %xmm4,%xmm9
movsd  0x60(%rsp),%xmm0
mulsd  0x138(%rsp),%xmm0
mulsd  %xmm5,%xmm0
movsd  (%rsp),%xmm2
movapd %xmm2,%xmm1
subsd  %xmm6,%xmm1
movapd %xmm1,%xmm6
movsd  %xmm1,0xd0(%rsp)
movsd  0x68(%rsp),%xmm1
mulsd  %xmm3,%xmm1
mulsd  %xmm7,%xmm1
movapd %xmm2,%xmm5
movapd %xmm2,%xmm7
subsd  %xmm1,%xmm5
movsd  %xmm5,0xa8(%rsp)
movsd  0x130(%rsp),%xmm1
movsd  0x90(%rsp),%xmm2
mulsd  %xmm2,%xmm1
mulsd  %xmm3,%xmm1
mulsd  %xmm5,%xmm1
mulsd  %xmm6,%xmm0
subsd  %xmm1,%xmm0
movsd  0xa0(%rsp),%xmm3
movapd %xmm3,%xmm1
addsd  %xmm3,%xmm1
mulsd  %xmm1,%xmm0
mulsd  %xmm3,%xmm3
mulsd  %xmm7,%xmm3
addsd  %xmm0,%xmm3
movsd  %xmm3,0x58(%rsp)
mulsd  %xmm2,%xmm2
mulsd  %xmm4,%xmm4
divsd  %xmm4,%xmm2
movsd  %xmm2,0x50(%rsp)
movapd %xmm9,%xmm0
movapd %xmm9,0x80(%rsp)
divsd  %xmm9,%xmm8
movsd  %xmm8,0x48(%rsp)
xorpd  0xc28(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1030 <exp@plt>
mulsd  0x48(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movapd 0x80(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1030 <exp@plt>
addsd  0xc0e(%rip),%xmm0
mulsd  0x48(%rsp),%xmm0
addsd  (%rsp),%xmm0
movsd  0x98(%rsp),%xmm1
mulsd  0xbfa(%rip),%xmm1
mulsd  0x68(%rsp),%xmm1
mulsd  0x40(%rsp),%xmm1
addsd  %xmm0,%xmm1
mulsd  0x50(%rsp),%xmm1
addsd  0x58(%rsp),%xmm1
movsd  %xmm1,0x58(%rsp)
movsd  0x60(%rsp),%xmm1
mulsd  %xmm1,%xmm1
movsd  0x150(%rsp),%xmm0
mulsd  %xmm0,%xmm0
divsd  %xmm0,%xmm1
movsd  %xmm1,0x50(%rsp)
movsd  0xb9f(%rip),%xmm0
movapd 0xc0(%rsp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x40(%rsp)
movapd %xmm1,%xmm0
xorpd  0xb70(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1030 <exp@plt>
mulsd  0x40(%rsp),%xmm0
movsd  %xmm0,0x80(%rsp)
movapd 0xc0(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1030 <exp@plt>
movapd %xmm0,%xmm1
addsd  0xb4f(%rip),%xmm1
mulsd  0x80(%rsp),%xmm1
addsd  (%rsp),%xmm1
movsd  0xa8(%rsp),%xmm2
movapd 0x100(%rsp),%xmm0
subsd  %xmm0,%xmm2
movsd  %xmm2,0x80(%rsp)
addsd  %xmm0,%xmm0
subsd  %xmm0,%xmm1
mulsd  0x50(%rsp),%xmm1
addsd  0x58(%rsp),%xmm1
movsd  %xmm1,0xc0(%rsp)
movapd 0xf0(%rsp),%xmm1
movsd  0x70(%rsp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x70(%rsp)
movapd %xmm1,%xmm0
xorpd  0xac8(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
call   1030 <exp@plt>
mulsd  0x70(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movapd 0xf0(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1030 <exp@plt>
addsd  0xaae(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
addsd  0x80(%rsp),%xmm0
movsd  0x90(%rsp),%xmm8
movsd  0xa95(%rip),%xmm4
mulsd  %xmm8,%xmm4
movsd  0x60(%rsp),%xmm1
mulsd  %xmm1,%xmm4
movsd  0x140(%rsp),%xmm9
mulsd  %xmm9,%xmm4
movsd  0x98(%rsp),%xmm7
mulsd  %xmm7,%xmm4
movapd 0x110(%rsp),%xmm3
mulsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm4
addsd  0xc0(%rsp),%xmm4
movapd %xmm4,%xmm2
movsd  0xa0(%rsp),%xmm4
mulsd  0x138(%rsp),%xmm4
mulsd  %xmm3,%xmm1
movapd %xmm1,%xmm0
xorpd  0xa0a(%rip),%xmm3
mulsd  0xe0(%rsp),%xmm3
movsd  (%rsp),%xmm1
addsd  %xmm3,%xmm1
movapd %xmm3,%xmm6
mulsd  %xmm4,%xmm1
movsd  0x40(%rsp),%xmm4
mulsd  0xd8(%rsp),%xmm4
movapd 0x20(%rsp),%xmm3
movsd  0xb0(%rsp),%xmm5
subsd  %xmm5,%xmm3
mulsd  %xmm4,%xmm3
movsd  0xd0(%rsp),%xmm4
addsd  %xmm6,%xmm4
addsd  %xmm4,%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm1,%xmm3
movapd %xmm3,%xmm4
addsd  0xa8(%rsp),%xmm6
movsd  0x70(%rsp),%xmm3
mulsd  0x68(%rsp),%xmm3
movsd  0xb8(%rsp),%xmm1
subsd  %xmm5,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm6,%xmm1
movapd %xmm1,%xmm3
movapd %xmm8,%xmm1
mulsd  %xmm9,%xmm1
mulsd  %xmm7,%xmm1
mulsd  %xmm3,%xmm1
subsd  %xmm1,%xmm4
mulsd  %xmm0,%xmm4
movapd %xmm4,0x20(%rsp)
xorpd  %xmm0,%xmm0
movsd  %xmm2,(%rsp)
ucomisd %xmm0,%xmm2
jb     16bb <MiltersenSchwartz+0x57b>
movsd  (%rsp),%xmm0
sqrtsd %xmm0,%xmm0
jmp    16c5 <MiltersenSchwartz+0x585>
movsd  (%rsp),%xmm0
call   1060 <sqrt@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x38(%rsp),%xmm1
movsd  0x30(%rsp),%xmm0
divsd  %xmm1,%xmm0
call   1040 <log@plt>
movapd %xmm0,%xmm3
movsd  (%rsp),%xmm1
mulsd  0x937(%rip),%xmm1
movapd 0x20(%rsp),%xmm0
subsd  %xmm0,%xmm3
movapd %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  0x10(%rsp),%xmm4
divsd  %xmm4,%xmm2
movapd %xmm2,(%rsp)
subsd  %xmm1,%xmm3
divsd  %xmm4,%xmm3
test   %ebx,%ebx
je     1782 <MiltersenSchwartz+0x642>
xorpd  0x8da(%rip),%xmm0
movapd %xmm3,0x10(%rsp)
call   1030 <exp@plt>
mulsd  0x30(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movaps (%rsp),%xmm0
mov    $0x1,%al
call   1050 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x20(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movaps 0x10(%rsp),%xmm0
mov    $0x1,%al
call   1050 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  0x38(%rsp),%xmm0
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
jmp    17f6 <MiltersenSchwartz+0x6b6>
movapd 0x876(%rip),%xmm1
xorpd  %xmm1,%xmm3
movapd %xmm3,%xmm0
mov    $0x1,%al
call   1050 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x10(%rsp)
movaps 0x20(%rsp),%xmm0
xorps  0x84e(%rip),%xmm0
call   1030 <exp@plt>
movsd  %xmm0,0x20(%rsp)
movaps (%rsp),%xmm0
xorps  0x838(%rip),%xmm0
mov    $0x1,%al
call   1050 <cnd@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x20(%rsp),%xmm1
mulsd  0x30(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x38(%rsp),%xmm0
mulsd  0x10(%rsp),%xmm0
subsd  %xmm1,%xmm0
mulsd  0xe8(%rsp),%xmm0
add    $0x120,%rsp
pop    %rbx
ret

LLVM IR (-O0):
define double @MiltersenSchwartz(i32 %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 i32
%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
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca double
%46 = alloca double
%47 = alloca double
%48 = alloca double
%49 = alloca double
%50 = alloca double
store i32 %0, i32* %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
%51 = load double, double* %27
%52 = load double, double* %19
%53 = fmul double %51, %52
%54 = call double @exp(double %53)
store double %54, double* %30
%55 = load double, double* %28
%56 = load double, double* %19
%57 = fmul double %55, %56
%58 = call double @exp(double %57)
store double %58, double* %31
%59 = load double, double* %27
%60 = fneg double %59
%61 = load double, double* %20
%62 = fmul double %60, %61
%63 = call double @exp(double %62)
store double %63, double* %32
%64 = load double, double* %28
%65 = fneg double %64
%66 = load double, double* %19
%67 = fmul double %65, %66
%68 = call double @exp(double %67)
store double %68, double* %33
%69 = load double, double* %28
%70 = fneg double %69
%71 = load double, double* %20
%72 = fmul double %70, %71
%73 = call double @exp(double %72)
store double %73, double* %34
%74 = load double, double* %28
%75 = fdiv double 1.000000e+00, %74
store double %75, double* %35
%76 = load double, double* %27
%77 = fdiv double 1.000000e+00, %76
store double %77, double* %36
%78 = load double, double* %33
%79 = fsub double 1.000000e+00, %78
store double %79, double* %37
%80 = load double, double* %27
%81 = load double, double* %28
%82 = fadd double %80, %81
store double %82, double* %38
%83 = load double, double* %30
%84 = fsub double %83, 1.000000e+00
store double %84, double* %39
%85 = load double, double* %31
%86 = fsub double %85, 1.000000e+00
store double %86, double* %40
%87 = load double, double* %35
%88 = load double, double* %34
%89 = fmul double %87, %88
%90 = load double, double* %40
%91 = fmul double %89, %90
store double %91, double* %41
%92 = load double, double* %28
%93 = fmul double 2.000000e+00, %92
store double %93, double* %42
%94 = load double, double* %27
%95 = fmul double 2.000000e+00, %94
store double %95, double* %43
%96 = load double, double* %21
%97 = load double, double* %21
%98 = fmul double %96, %97
%99 = load double, double* %19
%100 = load double, double* %21
%101 = fmul double 2.000000e+00, %100
%102 = load double, double* %23
%103 = load double, double* %25
%104 = fmul double %102, %103
%105 = load double, double* %35
%106 = fmul double %104, %105
%107 = load double, double* %19
%108 = load double, double* %41
%109 = fsub double %107, %108
%110 = load double, double* %22
%111 = load double, double* %24
%112 = fmul double %110, %111
%113 = load double, double* %36
%114 = fmul double %112, %113
%115 = load double, double* %19
%116 = load double, double* %36
%117 = load double, double* %32
%118 = fmul double %116, %117
%119 = load double, double* %39
%120 = fneg double %118
%121 = call double @llvm.fmuladd.f64(double %120, double %119, double %115)
%122 = fmul double %114, %121
%123 = fneg double %122
%124 = call double @llvm.fmuladd.f64(double %106, double %109, double %123)
%125 = fmul double %101, %124
%126 = call double @llvm.fmuladd.f64(double %98, double %99, double %125)
%127 = load double, double* %22
%128 = load double, double* %22
%129 = fmul double %127, %128
%130 = fmul double %129, 1.000000e+00
%131 = load double, double* %27
%132 = load double, double* %27
%133 = fmul double %131, %132
%134 = fdiv double %130, %133
%135 = load double, double* %19
%136 = load double, double* %43
%137 = fdiv double 1.000000e+00, %136
%138 = load double, double* %43
%139 = fneg double %138
%140 = load double, double* %20
%141 = fmul double %139, %140
%142 = call double @exp(double %141)
%143 = fmul double %137, %142
%144 = load double, double* %43
%145 = load double, double* %19
%146 = fmul double %144, %145
%147 = call double @exp(double %146)
%148 = fsub double %147, 1.000000e+00
%149 = call double @llvm.fmuladd.f64(double %143, double %148, double %135)
%150 = load double, double* %36
%151 = fmul double 2.000000e+00, %150
%152 = load double, double* %32
%153 = fmul double %151, %152
%154 = load double, double* %39
%155 = fneg double %153
%156 = call double @llvm.fmuladd.f64(double %155, double %154, double %149)
%157 = call double @llvm.fmuladd.f64(double %134, double %156, double %126)
%158 = load double, double* %23
%159 = load double, double* %23
%160 = fmul double %158, %159
%161 = fmul double %160, 1.000000e+00
%162 = load double, double* %28
%163 = load double, double* %28
%164 = fmul double %162, %163
%165 = fdiv double %161, %164
%166 = load double, double* %19
%167 = load double, double* %42
%168 = fdiv double 1.000000e+00, %167
%169 = load double, double* %42
%170 = fneg double %169
%171 = load double, double* %20
%172 = fmul double %170, %171
%173 = call double @exp(double %172)
%174 = fmul double %168, %173
%175 = load double, double* %42
%176 = load double, double* %19
%177 = fmul double %175, %176
%178 = call double @exp(double %177)
%179 = fsub double %178, 1.000000e+00
%180 = call double @llvm.fmuladd.f64(double %174, double %179, double %166)
%181 = load double, double* %41
%182 = call double @llvm.fmuladd.f64(double -2.000000e+00, double %181, double %180)
%183 = call double @llvm.fmuladd.f64(double %165, double %182, double %157)
%184 = load double, double* %22
%185 = fmul double 2.000000e+00, %184
%186 = load double, double* %23
%187 = fmul double %185, %186
%188 = load double, double* %26
%189 = fmul double %187, %188
%190 = load double, double* %36
%191 = fmul double %189, %190
%192 = load double, double* %35
%193 = fmul double %191, %192
%194 = load double, double* %19
%195 = load double, double* %36
%196 = load double, double* %32
%197 = fmul double %195, %196
%198 = load double, double* %39
%199 = fneg double %197
%200 = call double @llvm.fmuladd.f64(double %199, double %198, double %194)
%201 = load double, double* %41
%202 = fsub double %200, %201
%203 = load double, double* %38
%204 = fdiv double 1.000000e+00, %203
%205 = load double, double* %38
%206 = fneg double %205
%207 = load double, double* %20
%208 = fmul double %206, %207
%209 = call double @exp(double %208)
%210 = fmul double %204, %209
%211 = load double, double* %38
%212 = load double, double* %19
%213 = fmul double %211, %212
%214 = call double @exp(double %213)
%215 = fsub double %214, 1.000000e+00
%216 = call double @llvm.fmuladd.f64(double %210, double %215, double %202)
%217 = fneg double %193
%218 = call double @llvm.fmuladd.f64(double %217, double %216, double %183)
store double %218, double* %44
%219 = load double, double* %23
%220 = load double, double* %35
%221 = fmul double %219, %220
%222 = load double, double* %21
%223 = load double, double* %25
%224 = fmul double %222, %223
%225 = load double, double* %19
%226 = load double, double* %35
%227 = load double, double* %37
%228 = fneg double %226
%229 = call double @llvm.fmuladd.f64(double %228, double %227, double %225)
%230 = load double, double* %23
%231 = load double, double* %35
%232 = fmul double %230, %231
%233 = load double, double* %19
%234 = load double, double* %41
%235 = fsub double %233, %234
%236 = load double, double* %35
%237 = load double, double* %37
%238 = fneg double %236
%239 = call double @llvm.fmuladd.f64(double %238, double %237, double %235)
%240 = load double, double* %42
%241 = fdiv double 1.000000e+00, %240
%242 = load double, double* %34
%243 = fmul double %241, %242
%244 = load double, double* %31
%245 = load double, double* %33
%246 = fsub double %244, %245
%247 = call double @llvm.fmuladd.f64(double %243, double %246, double %239)
%248 = fmul double %232, %247
%249 = call double @llvm.fmuladd.f64(double %224, double %229, double %248)
%250 = load double, double* %22
%251 = load double, double* %26
%252 = fmul double %250, %251
%253 = load double, double* %36
%254 = fmul double %252, %253
%255 = load double, double* %19
%256 = load double, double* %36
%257 = load double, double* %32
%258 = fmul double %256, %257
%259 = load double, double* %39
%260 = fneg double %258
%261 = call double @llvm.fmuladd.f64(double %260, double %259, double %255)
%262 = load double, double* %35
%263 = load double, double* %37
%264 = fneg double %262
%265 = call double @llvm.fmuladd.f64(double %264, double %263, double %261)
%266 = load double, double* %38
%267 = fdiv double 1.000000e+00, %266
%268 = load double, double* %32
%269 = fmul double %267, %268
%270 = load double, double* %30
%271 = load double, double* %33
%272 = fsub double %270, %271
%273 = call double @llvm.fmuladd.f64(double %269, double %272, double %265)
%274 = fneg double %254
%275 = call double @llvm.fmuladd.f64(double %274, double %273, double %249)
%276 = fmul double %221, %275
store double %276, double* %45
%277 = load double, double* %44
%278 = call double @sqrt(double %277)
store double %278, double* %46
%279 = load double, double* %17
%280 = load double, double* %18
%281 = fdiv double %279, %280
%282 = call double @log(double %281)
store double %282, double* %47
%283 = load double, double* %44
%284 = fdiv double %283, 2.000000e+00
store double %284, double* %48
%285 = load double, double* %47
%286 = load double, double* %45
%287 = fsub double %285, %286
%288 = load double, double* %48
%289 = fadd double %287, %288
%290 = load double, double* %46
%291 = fdiv double %289, %290
store double %291, double* %49
%292 = load double, double* %47
%293 = load double, double* %45
%294 = fsub double %292, %293
%295 = load double, double* %48
%296 = fsub double %294, %295
%297 = load double, double* %46
%298 = fdiv double %296, %297
store double %298, double* %50
%299 = load i32, i32* %15
%300 = icmp ne i32 %299, 0
br i1 %300, label %301, label %319
301: ; preds = %14
%302 = load double, double* %16
%303 = load double, double* %17
%304 = load double, double* %45
%305 = fneg double %304
%306 = call double @exp(double %305)
%307 = fmul double %303, %306
%308 = load double, double* %49
%309 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %308)
%310 = sitofp i32 %309 to double
%311 = load double, double* %18
%312 = load double, double* %50
%313 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %312)
%314 = sitofp i32 %313 to double
%315 = fmul double %311, %314
%316 = fneg double %315
%317 = call double @llvm.fmuladd.f64(double %307, double %310, double %316)
%318 = fmul double %302, %317
store double %318, double* %29
br label %339
319: ; preds = %14
%320 = load double, double* %16
%321 = load double, double* %18
%322 = load double, double* %50
%323 = fneg double %322
%324 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %323)
%325 = sitofp i32 %324 to double
%326 = load double, double* %17
%327 = load double, double* %45
%328 = fneg double %327
%329 = call double @exp(double %328)
%330 = fmul double %326, %329
%331 = load double, double* %49
%332 = fneg double %331
%333 = call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %332)
%334 = sitofp i32 %333 to double
%335 = fmul double %330, %334
%336 = fneg double %335
%337 = call double @llvm.fmuladd.f64(double %321, double %325, double %336)
%338 = fmul double %320, %337
store double %338, double* %29
br label %339
339: ; preds = %319, %301
%340 = load double, double* %29
ret double %340
}

LLVM IR (-O2):
define double @MiltersenSchwartz(i32 %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 = fmul double %4, %12
%16 = tail call double @exp(double %15)
%17 = fmul double %4, %13
%18 = tail call double @exp(double %17)
%19 = fneg double %12
%20 = fmul double %19, %5
%21 = tail call double @exp(double %20)
%22 = fneg double %13
%23 = fmul double %22, %4
%24 = tail call double @exp(double %23)
%25 = fmul double %22, %5
%26 = tail call double @exp(double %25)
%27 = fdiv double 1.000000e+00, %13
%28 = fdiv double 1.000000e+00, %12
%29 = fsub double 1.000000e+00, %24
%30 = fadd double %12, %13
%31 = fadd double %16, -1.000000e+00
%32 = fadd double %18, -1.000000e+00
%33 = fmul double %27, %26
%34 = fmul double %32, %33
%35 = fmul double %13, 2.000000e+00
%36 = fmul double %12, 2.000000e+00
%37 = fmul double %6, %6
%38 = fmul double %6, 2.000000e+00
%39 = fmul double %8, %10
%40 = fmul double %39, %27
%41 = fsub double %4, %34
%42 = fneg double %28
%43 = fmul double %21, %42
%44 = tail call double @llvm.fmuladd.f64(double %43, double %31, double %4)
%45 = fneg double %7
%46 = fmul double %45, %9
%47 = fmul double %46, %28
%48 = fmul double %47, %44
%49 = tail call double @llvm.fmuladd.f64(double %40, double %41, double %48)
%50 = fmul double %38, %49
%51 = tail call double @llvm.fmuladd.f64(double %37, double %4, double %50)
%52 = fmul double %7, %7
%53 = fmul double %12, %12
%54 = fdiv double %52, %53
%55 = fdiv double 1.000000e+00, %36
%56 = fneg double %36
%57 = fmul double %56, %5
%58 = tail call double @exp(double %57)
%59 = fmul double %55, %58
%60 = fmul double %36, %4
%61 = tail call double @exp(double %60)
%62 = fadd double %61, -1.000000e+00
%63 = tail call double @llvm.fmuladd.f64(double %59, double %62, double %4)
%64 = fmul double %28, -2.000000e+00
%65 = fmul double %64, %21
%66 = tail call double @llvm.fmuladd.f64(double %65, double %31, double %63)
%67 = tail call double @llvm.fmuladd.f64(double %54, double %66, double %51)
%68 = fmul double %8, %8
%69 = fmul double %13, %13
%70 = fdiv double %68, %69
%71 = fdiv double 1.000000e+00, %35
%72 = fneg double %35
%73 = fmul double %72, %5
%74 = tail call double @exp(double %73)
%75 = fmul double %71, %74
%76 = fmul double %35, %4
%77 = tail call double @exp(double %76)
%78 = fadd double %77, -1.000000e+00
%79 = tail call double @llvm.fmuladd.f64(double %75, double %78, double %4)
%80 = tail call double @llvm.fmuladd.f64(double %34, double -2.000000e+00, double %79)
%81 = tail call double @llvm.fmuladd.f64(double %70, double %80, double %67)
%82 = fsub double %44, %34
%83 = fdiv double 1.000000e+00, %30
%84 = fneg double %30
%85 = fmul double %84, %5
%86 = tail call double @exp(double %85)
%87 = fmul double %83, %86
%88 = fmul double %30, %4
%89 = tail call double @exp(double %88)
%90 = fadd double %89, -1.000000e+00
%91 = tail call double @llvm.fmuladd.f64(double %87, double %90, double %82)
%92 = fmul double %7, -2.000000e+00
%93 = fmul double %92, %8
%94 = fmul double %93, %11
%95 = fmul double %94, %28
%96 = fmul double %95, %27
%97 = tail call double @llvm.fmuladd.f64(double %96, double %91, double %81)
%98 = fmul double %27, %8
%99 = fmul double %6, %10
%100 = fneg double %27
%101 = tail call double @llvm.fmuladd.f64(double %100, double %29, double %4)
%102 = tail call double @llvm.fmuladd.f64(double %100, double %29, double %41)
%103 = fmul double %71, %26
%104 = fsub double %18, %24
%105 = tail call double @llvm.fmuladd.f64(double %103, double %104, double %102)
%106 = fmul double %98, %105
%107 = tail call double @llvm.fmuladd.f64(double %99, double %101, double %106)
%108 = tail call double @llvm.fmuladd.f64(double %100, double %29, double %44)
%109 = fmul double %83, %21
%110 = fsub double %16, %24
%111 = tail call double @llvm.fmuladd.f64(double %109, double %110, double %108)
%112 = fmul double %45, %11
%113 = fmul double %112, %28
%114 = tail call double @llvm.fmuladd.f64(double %113, double %111, double %107)
%115 = fmul double %98, %114
%116 = tail call double @sqrt(double %97)
%117 = fdiv double %2, %3
%118 = tail call double @log(double %117)
%119 = fmul double %97, 5.000000e-01
%120 = fsub double %118, %115
%121 = fadd double %120, %119
%122 = fdiv double %121, %116
%123 = fsub double %120, %119
%124 = fdiv double %123, %116
%125 = icmp eq i32 %0, 0
br i1 %125, label %137, label %126
126: ; preds = %14
%127 = fneg double %115
%128 = tail call double @exp(double %127)
%129 = fmul double %128, %2
%130 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %122)
%131 = sitofp i32 %130 to double
%132 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %124)
%133 = sitofp i32 %132 to double
%134 = fneg double %133
%135 = fmul double %134, %3
%136 = tail call double @llvm.fmuladd.f64(double %129, double %131, double %135)
br label %150
137: ; preds = %14
%138 = fneg double %124
%139 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %138)
%140 = sitofp i32 %139 to double
%141 = fneg double %115
%142 = tail call double @exp(double %141)
%143 = fneg double %122
%144 = tail call i32 (double, ...) bitcast (i32 (...)* @cnd to i32 (double, ...)*)(double %143)
%145 = sitofp i32 %144 to double
%146 = fneg double %142
%147 = fmul double %146, %2
%148 = fmul double %147, %145
%149 = tail call double @llvm.fmuladd.f64(double %3, double %140, double %148)
br label %150
150: ; preds = %137, %126
%151 = phi double [ %136, %126 ], [ %149, %137 ]
%152 = fmul double %151, %1
ret double %152
}